所以我正在尝试将 2 列转换为 1 个日期时间列。输入列如下所示:
date hour
1/1/2015 1
1/1/2015 2
1/1/2015 3
其中df.date
的值是string
,df.hour
的值是int
。我正在尝试将这两列转换为一列,以便:
datetime
2015-1-1 1:00:00
2015-1-1 2:00:00
2015-1-1 3:00:00
我以为一个简单的df['x'] = pd.to_datetime(df[['date', 'hour']]
会起作用,但结果我得到了一个ValueError
两列粘贴为一列,然后使用相应的format
参数进行转换:
pd.to_datetime(df['date'] + ' ' + df['hour'].astype(str), format = "%d/%m/%Y %H")
# 0 2015-01-01 01:00:00
# 1 2015-01-01 02:00:00
# 2 2015-01-01 03:00:00
# dtype: datetime64[ns]
基本上,您需要使用 pandas.to_datetime
和 datetime.timedelta
.
from datetime import timedelta
df = pd.to_datetime(df['date']) + df['hour'].apply(lambda x: timedelta(hours=int(x)))
解释:
from datetime import timedelta
dft['date'] = pd.to_datetime(dft['date'])
dft['hour_h'] = dft['hour'].apply(lambda x: timedelta(hours=int(x)))
dff = dft['date']+dft['hour_h']
输出:
dff
Out[42]:
0 2015-01-01 01:00:00
1 2015-01-01 02:00:00
2 2015-01-01 03:00:00
dtype: datetime64[ns]
这是另一种方法:
In [224]:
df['datetime'] = pd.to_datetime(df['date']) + pd.TimedeltaIndex(df['hour'], unit='h')
df
Out[224]:
date hour datetime
0 1/1/2015 1 2015-01-01 01:00:00
1 1/1/2015 2 2015-01-01 02:00:00
2 1/1/2015 3 2015-01-01 03:00:00
基本上,这里的关键区别是从小时列构造一个TimedeltaIndex
,并将其添加到转换后的datetime
col 结果中to_datetime