首页 > 解决方案 > 如何从组合 str timedelta/datetime 列创建时间戳列?蟒蛇熊猫

问题描述

我想从这些数据框中创建一个时间戳列(Heure fin inter.):

Date        Heure       Durée (min) Heure debut inter.    Heure fin inter.
2019-08-11  13:50:00    00:10:00    2019-08-11 13:50:00   14:00:00
2019-08-11  15:00:00    00:30:00    2019-08-11 15:00:00   15:30:00
2019-08-11  16:30:00    00:05:00    2019-08-11 16:30:00   16:35:00
2019-08-11  18:00:00    00:15:00    2019-08-11 18:00:00   18:15:00 

为此,我尝试了以下代码:

df1['Durée (min)'] = pd.to_timedelta(df1['Durée (min)'], unit='min')
df1['Heure'] = df1['Heure'].dt.strftime('%H:%M:%S')
df1['Date'] = df1['Date'].dt.strftime('%Y-%m-%d')
df1['Heure fin inter.'] = df1['Heure'] + df1['Durée (min)']

df1['TS fin inter.'] = df1['Date'] + " " + df1['Heure fin inter.']

但是我在最后一行代码中有这个错误:TypeError: unsupported operand type(s) for +: 'Timedelta' and 'str'

这里 df.info()

 #   Column                    Non-Null Count  Dtype          
---  ------                    --------------  -----          
 0   Date                      93 non-null     object         
 1   Heure                     93 non-null     object           
 5   Durée (min)               93 non-null     timedelta64[ns]
 9   Heure debut inter.        93 non-null     datetime64[ns] 
 10  Heure fin inter.          93 non-null     timedelta64[ns]

预期结果:

Date        Heure       Durée (min) Heure debut inter.    Heure fin inter.
2019-08-11  13:50:00    00:10:00    2019-08-11 13:50:00   2019-08-11 14:00:00
2019-08-11  15:00:00    00:30:00    2019-08-11 15:00:00   2019-08-11 15:30:00
2019-08-11  16:30:00    00:05:00    2019-08-11 16:30:00   2019-08-11 16:35:00
2019-08-11  18:00:00    00:15:00    2019-08-11 18:00:00   2019-08-11 18:15:00 

标签: pythonpandasdataframedatetime

解决方案


包括来自您的其他问题的信息,给定一个df

df
          date      hour  duration[min]
0  2019-08-11  13:50:00             10
1  2019-08-11  15:00:00             30
2  2019-08-11  16:30:00              5
3  2019-08-11  18:00:00             15

您可以简单地计算开始和结束时间戳,例如

df['interview_start'] = pd.to_datetime(df['date']+' '+df['hour'])
df['interview_end'] = df['interview_start'] + pd.to_timedelta(df['duration[min]'], unit='min')

# df
#          date      hour  duration[min]     interview_start       interview_end
# 0  2019-08-11  13:50:00             10 2019-08-11 13:50:00 2019-08-11 14:00:00
# 1  2019-08-11  15:00:00             30 2019-08-11 15:00:00 2019-08-11 15:30:00
# 2  2019-08-11  16:30:00              5 2019-08-11 16:30:00 2019-08-11 16:35:00
# 3  2019-08-11  18:00:00             15 2019-08-11 18:00:00 2019-08-11 18:15:00

推荐阅读