python3.5/pandas - 将多列转换为日期时间



所以我正在尝试将 2 列转换为 1 个日期时间列。输入列如下所示:

date            hour
1/1/2015          1
1/1/2015          2
1/1/2015          3

其中df.date的值是stringdf.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_datetimedatetime.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

相关内容

  • 没有找到相关文章

最新更新