2017-08-14 69 views
3

由于DF怎样才能结合datetime.date和大熊猫数据帧datetime.time列?

  Date  Time Data  
3 2017-08-10 15:15:00 a  
0 2017-08-11 15:15:00 b  
1 2017-08-12 15:15:00 c  
2 2017-08-13 15:15:00 d  
1 2017-08-14 15:15:00 e  

而且

print (type(df['Date'].iat[0])) 
<class 'datetime.date'> 

print (type(df['Time'].iat[0])) 
<class 'datetime.time'> 

我怎么能结合df.Date和df.Time成DateTime列是一个DateTime对象??:

 Date  Time Data DateTime 
3 2017-08-10 15:15:00 a  2017-08-10 15:15:00 
0 2017-08-11 15:15:00 b  2017-08-11 15:15:00 
1 2017-08-12 15:15:00 c  2017-08-12 15:15:00 
2 2017-08-13 15:15:00 d  2017-08-13 15:15:00 
1 2017-08-14 15:15:00 e  2017-08-14 15:15:00 

什么我想:

df['DateTime'] = df.apply(lambda r : pd.datetime.combine(r['Date'],r['Time']),1) 

这工作以及预期的,但是,我宁愿一个量化操作,我得到了以下信息:

C:\Users\User\Anaconda3\lib\site-packages\ipykernel\__main__.py:1: 
SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame. 
Try using .loc[row_indexer,col_indexer] = value instead 

See the caveats in the documentation: http://pandas.pydata.org/pandas- 
docs/stable/indexing.html#indexing-view-versus-copy 
if __name__ == '__main__': 

回答

1

这里的问题是,这两个日期和时间已经在日期时间格式。尝试

df['datetime'] = pd.to_datetime(df['Date'].dt.strftime('%Y-%m-%d') + df['Time'].astype(str), format = '%Y-%m-%d%H:%M:%S') 

虽然我不知道这是否会比使用datetime.combine

+0

我以前试过这种更有效的,但我得到:“类型错误:不支持的操作数类型(S)为+:“日期时间.date”和‘海峡’” – hernanavella

+0

我测试和它的工作,什么版本是你吗?你也可以尝试另一种方法,我添加 – Vaishali

+0

替代形式给了我这样的:类型错误:不支持的操作数类型(S)为+:“datetime.date”和“datetime.time” – hernanavella