【发布时间】:2015-08-26 02:47:28
【问题描述】:
最终编辑(希望如此): 天哪,你解决了! 升级到 Pandas 0.15.2 后,此解决方案似乎有效:
trades['OEDatum'] = (trades[['OEDatum', 'OEUhrzeit']].apply
(lambda x: dt.datetime.combine
(x['OEDatum'].date(), x['OEUhrzeit']), axis=1))
非常感谢@EDChum 和@joris
我正在尝试通过 read_excel 从 Excelsheet 中提取一些数据到 Pandas 数据框中:
Asset OEDatum OEUhrzeit ODatum OUhrzeit L/S Entrykurs \
Trade
1 EURUSD 2014-06-12 12:00:00 2014-06-12 12:23:09 L 1.2456
2 USDJPY 2014-11-11 10:15:35 2014-11-11 10:34:50 S 126.6300
3 EURJPY 2014-12-23 13:15:24 2014-12-23 13:25:45 L 114.4600
4 GBPJPY 2014-12-23 14:27:36 2014-12-23 14:35:56 S 156.6000
我感兴趣的值,有以下数据类型:
OEDatum datetime64[ns]
OEUhrzeit object
ODatum datetime64[ns]
OUhrzeit object
如您所见,Pandas 将日期提取为 datetime64 值,而时间是一个对象。
现在我需要将 'OEDatum' 与 'OEUhrzeit' 以及 'ODatum' 与 'OUhrzeit' 结合到时间戳中。这些时间戳稍后将用于搜索大型 tickdata 文件。
但我根本不可能将日期与时间结合起来......
在许多其他尝试中,我想将时间数据更改为字符串,然后使用“to_datetime”:
trades.OEUhrzeit.apply(str)
pd.to_datetime(trades.OEUhrzeit, utc=False, format='%H%M%S')
但接下来是这样的:
Traceback (most recent call last):
File "F:\Python Projekte\Test und Funktionsenwicklung\src\Tupel_und_ATR_Updater.py", line 251, in <module>
trades_ohne_tupel()
File "F:\Python Projekte\Test und Funktionsenwicklung\src\Tupel_und_ATR_Updater.py", line 173, in trades_ohne_tupel
**pd.to_datetime(trades.OEUhrzeit, utc=False, format='%H%M%S')
File "C:\Python34\lib\site-packages\pandas\tseries\tools.py", line 320, in to_datetime
values = _convert_listlike(arg.values, False, format)**
File "C:\Python34\lib\site-packages\pandas\tseries\tools.py", line 313, in _convert_listlike
raise e
File "C:\Python34\lib\site-packages\pandas\tseries\tools.py", line 287, in _convert_listlike
arg, format, coerce=coerce
File "tslib.pyx", line 1579, in pandas.tslib.array_strptime (pandas\tslib.c:25541)
ValueError: time data datetime.time(12, 0) does not match format '%H%M%S'
所以我希望有人可以向我展示这个问题的解决方案。 提前谢谢。
编辑:@EDChum 你说得对,我使用 pandas 0.14.1、numpy 1.8.2 和 Python 3.4.2 - 认为这意味着我必须更新我的熊猫.......
【问题讨论】:
-
我认为你不需要
to_datetime位,你可以试试df['OEDatum'] = df[['OEDatum','OEUhrzeit']].apply(lambda x: dt.datetime.combine(x['OEDatum'].date(),x['OEUhrzeit']), axis=1) -
是的,这就是解决方案,请参阅我的编辑。再次感谢!
标签: python excel datetime pandas