Pandas日期时间的自动识别

2024-09-28 05:26:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着减去两个时间序列以得到时间上的差异。在

中的源数据火车.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

我的代码是

^{pr2}$

我得到一个错误,结果是:

TypeError: unsupported operand type(s) for -: 'str' and 'str'

这大概是因为datetime列存储为对象或字符串而不是datetime对象。在某些装置中,pandas能够自动识别日期列,如下图所示。如何设置?我的经验是pandas无法预测地以不同的格式识别日期列。我做错什么了?提前谢谢。在

我在一个jupyter笔记本中使用python3.6和pandas 0.20。在


Tags: csv数据对象idpandasdatetime时间序列
3条回答

耶斯雷尔的回答是好的。在

另外,下面的方法也可以。在

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

在pandas中,不指定datetimes列而自动解析它们是不可能的。在

您需要定义用于按^{}中参数parse_dates中的位置解析到datetime的列:

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

或按列名称:

^{pr2}$
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

相关问题 更多 >

    热门问题