我正试图减去两个时刻表,以得到时间上的差异。
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列被存储为对象或字符串,而不是日期时间对象。在一些装置中,熊猫能够自动识别这样的日期列。这是怎么安排的?我的经验是,熊猫无法预测地以不同的格式识别日期列。我做错了什么?提前谢谢。
我正在使用Python3.6和熊猫0.20在一个jupyter笔记本。
发布于 2017-08-08 06:20:28
在熊猫中,不指定日期时间列的自动解析是不可能的。
您需要定义列,以便按参数parse_dates中的read_csv中的位置解析日期时间。
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发布于 2017-08-08 06:29:00
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发布于 2017-08-08 06:38:41
吉兹拉尔的回答是好的。
另外,以下内容也将有效。
train = pd.read_csv('./train.csv')
train['dropoff_datetime'] = pd.to_datetime(train.dropoff_datetime)
train['pickup_datetime'] = pd.to_datetime(train.pickup_datetime)https://stackoverflow.com/questions/45560627
复制相似问题