Always convert to posix time
parent
ac5e9de1b3
commit
ee4b3a327c
|
@ -64,21 +64,35 @@ def from_df(
|
||||||
"""Convert OHLC formatted ``pandas.DataFrame`` to ``numpy.recarray``.
|
"""Convert OHLC formatted ``pandas.DataFrame`` to ``numpy.recarray``.
|
||||||
"""
|
"""
|
||||||
df.reset_index(inplace=True)
|
df.reset_index(inplace=True)
|
||||||
df['Date'] = [d.timestamp() for d in df.Date]
|
|
||||||
|
# hackery to convert field names
|
||||||
|
date = 'Date'
|
||||||
|
if 'date' in df.columns:
|
||||||
|
date = 'date'
|
||||||
|
|
||||||
|
# convert to POSIX time
|
||||||
|
df[date] = [d.timestamp() for d in df[date]]
|
||||||
|
|
||||||
# try to rename from some camel case
|
# try to rename from some camel case
|
||||||
columns = {
|
columns = {
|
||||||
'Date': 'time',
|
'Date': 'time',
|
||||||
|
'date': 'time',
|
||||||
'Open': 'open',
|
'Open': 'open',
|
||||||
'High': 'high',
|
'High': 'high',
|
||||||
'Low': 'low',
|
'Low': 'low',
|
||||||
'Close': 'close',
|
'Close': 'close',
|
||||||
'Volume': 'volume',
|
'Volume': 'volume',
|
||||||
}
|
}
|
||||||
for name in df.columns:
|
|
||||||
if name not in columns:
|
|
||||||
del df[name]
|
|
||||||
df = df.rename(columns=columns)
|
df = df.rename(columns=columns)
|
||||||
|
|
||||||
|
for name in df.columns:
|
||||||
|
if name not in OHLC_dtype.names:
|
||||||
|
del df[name]
|
||||||
|
|
||||||
|
# TODO: it turns out column access on recarrays is actually slower:
|
||||||
|
# https://jakevdp.github.io/PythonDataScienceHandbook/02.09-structured-data-numpy.html#RecordArrays:-Structured-Arrays-with-a-Twist
|
||||||
|
# it might make sense to make these structured arrays?
|
||||||
array = df.to_records()
|
array = df.to_records()
|
||||||
_nan_to_closest_num(array)
|
_nan_to_closest_num(array)
|
||||||
|
|
||||||
|
@ -88,7 +102,6 @@ def from_df(
|
||||||
def _nan_to_closest_num(array: np.ndarray):
|
def _nan_to_closest_num(array: np.ndarray):
|
||||||
"""Return interpolated values instead of NaN.
|
"""Return interpolated values instead of NaN.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
for col in ['open', 'high', 'low', 'close']:
|
for col in ['open', 'high', 'low', 'close']:
|
||||||
mask = np.isnan(array[col])
|
mask = np.isnan(array[col])
|
||||||
if not mask.size:
|
if not mask.size:
|
||||||
|
|
Loading…
Reference in New Issue