我试图减去两个时间序列以获得时间差异。
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]
我收到的错误以:
结尾TypeError: unsupported operand type(s) for -: 'str' and 'str'
大概这是因为datetime列存储为对象或字符串而不是datetime对象。在某些安装中,pandas能够自动识别诸如此类的日期列。怎么设置?我的经验是,大熊猫不可预知地以不同的格式识别日期列。我究竟做错了什么?提前谢谢。
我在jupyter笔记本中使用Python 3.6和pandas 0.20。
答案 0 :(得分:1)
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
答案 1 :(得分:0)
在pandas中无法自动解析日期时间列而不指定它们。
您需要按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
答案 2 :(得分:0)
@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)