自动识别大熊猫的日期时间
问题描述:
我想减去两个时间序列以获得时间上的差异。自动识别大熊猫的日期时间
在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)
现在确实有效。我可以发誓我之前运行过这个确切的代码。是否有任何理由让熊猫在相同的代码上运行不同?我猜不会。我一定错过了什么。 – Chogg