Tim*_*LCG 5 python datetime pandas
我的DataFrame(TradeData)的索引是字符串格式:
In [30]: TradeData.index
Out[30]: Index(['09/30/2013 : 04:14 PM', '09/30/2013 : 03:53 PM', ... ], dtype=object)
Run Code Online (Sandbox Code Playgroud)
我希望它能在Datetime.但转换似乎不起作用:
In [31]: TradeDataIdxd = pd.to_datetime(TradeData.index, format="%m/%d/%Y : %I:%M %p")
Traceback (most recent call last):
File "<ipython-input-31-1191c22cd132>", line 1, in <module>
TradeDataIdxd = pd.to_datetime(TradeData.index, format="%m/%d/%Y : %I:%M %p")
File "C:\WinPython-64bit-3.3.2.3\python-3.3.2.amd64\lib\site-packages\pandas\tseries\tools.py", line 128, in to_datetime
return _convert_listlike(arg, box=box)
File "C:\WinPython-64bit-3.3.2.3\python-3.3.2.amd64\lib\site-packages\pandas\tseries\tools.py", line 104, in _convert_listlike
result = tslib.array_strptime(arg, format)
File "tslib.pyx", line 1137, in pandas.tslib.array_strptime (pandas\tslib.c:18543)
KeyError: 'p'
Run Code Online (Sandbox Code Playgroud)
TradeData.index的所有元素都不是'p'.任何想法可能是什么问题?提前致谢.
您可以通过重置索引、通过 map/lambda/strptime 操作系列,然后最后再次设置索引来规避此 to_datetime 问题。
In [1058]: TradeData.index
Out[1058]: Index([u'09/30/2013 : 04:14 PM', u'09/30/2013 : 03:53 PM', u'09/30/2013 : 03:53 PM'], dtype=object)
In [1059]: index_name = TradeData.index.name
In [1060]: TradeData = TradeData.reset_index()
In [1061]: TradeData[index_name] = TradeData[index_name].map(lambda x: datetime.strptime(x, "%m/%d/%Y
: %I:%M %p"))
In [1062]: TradeData = TradeData.set_index(index_name)
In [1063]: TradeData.index
Out[1063]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-09-30 16:14:00, ..., 2013-09-30 15:53:00]
Length: 3, Freq: None, Timezone: None
Run Code Online (Sandbox Code Playgroud)
不太简洁,但具有相同的效果。或者,将其打包在一个函数中:
def df_index_to_datetime(df, datetime_format):
index_name = df.index.name
df = df.reset_index()
df[index_name] = df[index_name].map(lambda x: datetime.strptime(x, datetime_format))
df = df.set_index(index_name)
return df
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2266 次 |
| 最近记录: |