我正在從 sqlite3 讀取 ohlc,我的索引是 int64 型別的:
index open high low close volume trade_count vwap ticker
30273 2022-09-23 10:11:00 00:00 22.48 22.63 22.40 22.41 12289.0 13.0 22.417248 BKR
當我列印 df.index 我得到:
...
23127, 23128, 23129, 23130, 23131, 23132, 23133, 23134, 23135,
23136],
dtype='int64', length=2427)
然后我將索引轉換為日期時間:
df = pd.read_sql_query("SELECT * from ohlc_minutes", conn)
df.index = pd.to_datetime(df.index, unit='s')
這給了我:
...
'1970-01-03 16:15:48', '1970-01-03 16:15:49',
'1970-01-03 16:15:50', '1970-01-03 16:15:51',
'1970-01-03 16:15:52', '1970-01-03 16:15:53',
'1970-01-03 16:15:54', '1970-01-03 16:15:55',
'1970-01-03 16:15:56', '1970-01-03 16:15:57'],
dtype='datetime64[ns]', length=2629, freq=None)
這將我的日期轉換為 1970 年。
我只是希望它使用出現在我的 df 索引中的所有資訊轉換為正常的日期時間,例如:
2022-09-23 10:11:00 00:00
更新
.loc按照 jkr 的建議嘗試使用:
df.loc['index'] = pd.to_datetime(df.loc['index'], unit='s')
這給出了錯誤:
Traceback (most recent call last):
File "/home/dan/Documents/code/wolfhound/vectorbt.py", line 19, in <module>
df.loc['index'] = pd.to_datetime(df.loc['index'], unit='s')
File "/home/dan/.local/lib/python3.10/site-packages/pandas/core/indexing.py", line 967, in __getitem__
return self._getitem_axis(maybe_callable, axis=axis)
File "/home/dan/.local/lib/python3.10/site-packages/pandas/core/indexing.py", line 1205, in _getitem_axis
return self._get_label(key, axis=axis)
File "/home/dan/.local/lib/python3.10/site-packages/pandas/core/indexing.py", line 1153, in _get_label
return self.obj.xs(label, axis=axis)
File "/home/dan/.local/lib/python3.10/site-packages/pandas/core/generic.py", line 3864, in xs
loc = index.get_loc(key)
File "/home/dan/.local/lib/python3.10/site-packages/pandas/core/indexes/range.py", line 389, in get_loc
raise KeyError(key)
KeyError: 'index'
uj5u.com熱心網友回復:
問題是index列,所以首先將其轉換為df.index,也省略unit='s':
#index column to df.index
df = df.set_index('index')
#convert to DatetimeIndex
df.index = pd.to_datetime(df.index)
或者:
#convert index column to datetimes
df['index'] = pd.to_datetime(df['index'])
#convert column index to df.index
df = df.set_index('index')
uj5u.com熱心網友回復:
to_datetime使用默認 POSIX 時間(請參閱doc If 'unix' (or POSIX) time; origin is set to 1970-01-01.)
如果您有 POSIX 時間但沒有年份(相對) ,則可以更改指定origin或給出offset
您輸入的格式是什么?
uj5u.com熱心網友回復:
這是因為 int 是自紀元以來的秒數。參見例如https://www.epochconverter.com/
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/511642.html
