自动识别大熊猫的日期时间

问题描述:

我想减去两个时间序列以获得时间上的差异。自动识别大熊猫的日期时间

在train.csv源数据看起来像

id,vendor_id,pickup_datetime,dropoff_datetime 
id2875421,2,2016-03-14 17:24:55,2016-03-14 17:32:30 
id2377394,1,2016-06-12 00:43:35,2016-06-12 00:54:38 

我的代码是

train = pd.read_csv('./train.csv') out=train.dropoff_datetime[0:5]-train.dropoff_datetime[0:5]

我得到了它结束了一个错误:

类型错误:不支持的操作数类型( s)为 - :'str'和'str'

Presuma bly这是因为日期时间列被存储为对象或字符串而不是日期时间对象。在一些装置中,熊猫能够自动识别这样的日期列。这怎么设置?我的经验是,熊猫无法预知地识别不同格式的日期列。我究竟做错了什么?提前致谢。

我使用python 3.6和熊猫0.20在jupyter笔记本

您需要定义列在read_csv参数parse_dates通过岗位分析,以日期时间:

train = pd.read_csv('./train.csv', parse_dates=[2,3]) 

或者按列名:

train = pd.read_csv('./train.csv', parse_dates=['pickup_datetime','dropoff_datetime']) 

print (train.dtypes) 
id       object 
vendor_id     int64 
pickup_datetime  datetime64[ns] 
dropoff_datetime datetime64[ns] 
dtype: object 

out=train.dropoff_datetime[0:5]-train.pickup_datetime[0:5] 
print (out) 
0 00:07:35 
1 00:11:03 
dtype: timedelta64[ns] 

对于新柱:

train['difference']=train.dropoff_datetime-train.pickup_datetime 
print (train) 
      id vendor_id  pickup_datetime dropoff_datetime difference 
0 id2875421   2 2016-03-14 17:24:55 2016-03-14 17:32:30 00:07:35 
1 id2377394   1 2016-06-12 00:43:35 2016-06-12 00:54:38 00:11:03 

train = pd.read_csv('./train.csv') 
>>>> train.assign(out=pd.to_datetime(train.dropoff_datetime) - pd.to_datetime(train.pickup_datetime)) 
      id vendor  pickup_datetime  dropoff_datetime  out 
0 id2875421  1 2016-03-14 17:24:55 2016-03-14 17:32:30 00:07:35 
1 id2377394  2 2016-06-12 00:43:35 2016-06-12 00:54:38 00:11:03 

答案由@jezrael好。

此外,以下将工作。

train = pd.read_csv('./train.csv') 
train['dropoff_datetime'] = pd.to_datetime(train.dropoff_datetime) 
train['pickup_datetime'] = pd.to_datetime(train.pickup_datetime) 
+0

现在确实有效。我可以发誓我之前运行过这个确切的代码。是否有任何理由让熊猫在相同的代码上运行不同?我猜不会。我一定错过了什么。 – Chogg