最终编辑(希望): 天哪,你解决了! 升级到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将一些数据从Excel表格中提取到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'
所以我希望有人能告诉我这个问题的解决方案。 Thx提前。
编辑:@EDChum你是对的我使用pandas 0.14.1,numpy 1.8.2和Python 3.4.2 - 认为这意味着我必须更新我的熊猫.......答案 0 :(得分:0)
一种方法是将时间字符串转换为日期时间,但只占用时间部分,然后拨打apply
并致电datetime.combine
以生成两列的日期时间:
B = cumsum(Bd)
修改强>
您的时间列似乎已经是In [61]:
df['OEtime'] = pd.to_datetime(df['OEUhrzeit']).dt.time
df['OEDatum'] = df[['OEDatum','OEtime']].apply(lambda x: dt.datetime.combine(x['OEDatum'].date(),x['OEtime']), axis=1)
In [62]:
df['OUhrtime'] = pd.to_datetime(df['OUhrzeit']).dt.time
df['ODatum'] = df[['ODatum','OUhrtime']].apply(lambda x: dt.datetime.combine(x['ODatum'].date(),x['OUhrtime']), axis=1)
df
Out[62]:
Trade Asset OEDatum OEUhrzeit ODatum OUhrzeit \
0 1 EURUSD 2014-06-12 12:00:00 12:00:00 2014-06-12 12:23:09 12:23:09
1 2 USDJPY 2014-11-11 10:15:35 10:15:35 2014-11-11 10:34:50 10:34:50
2 3 EURJPY 2014-12-23 13:15:24 13:15:24 2014-12-23 13:25:45 13:25:45
3 4 GBPJPY 2014-12-23 14:27:36 14:27:36 2014-12-23 14:35:56 14:35:56
L/S Entrykurs OEtime OUhrtime
0 L 1.2456 12:00:00 12:23:09
1 S 126.6300 10:15:35 10:34:50
2 L 114.4600 13:15:24 13:25:45
3 S 156.6000 14:27:36 14:35:56
对象,因此只需执行以下操作:
datetime.time