首页 > 解决方案 > 在数据框python中格式化时间差

问题描述

我的数据中有两行我想要时差

        request           Req_Created       Req_Closed    
       0 REQ0079455     15/05/2019  16:51   23/05/2019 20:53
     1 REQ0079455     15/05/2019 16:51    23/05/2019 20:53

使用数据框:

df['Req_time_taken'] = pd.to_datetime(df['Req_Closed'], format ='%d/%m/%Y %H:%M') - pd.to_datetime(df['Req_Created'], format ='%d/%m/%Y %H:%M') 
df.to_csv ("102.csv")

问题是输出格式不可读

          request     Req_Created          Req_Closed         Req_time_taken
       0  REQ0079455  15/05/2019 16:51    23/05/2019 20:53    8 days 04:02:00.000000000
       1  REQ0079455  15/05/2019 16:51    23/05/2019 20:53    8 days 04:02:00.000000000

如何以以下两种格式显示结果:

          request     Req_Created          Req_Closed         Req_time_taken_1    Req_time_taken_2
       0  REQ0079455  15/05/2019 16:51    23/05/2019 20:53    8 days 04:02        196 hours 02 minutes
       1  REQ0079455  15/05/2019 16:51    23/05/2019 20:53    8 days 04:02        196 hours 02 minutes

请注意 Req_time_taken_1 和 Req_time_taken 的格式差异

标签: pythondataframedatetime

解决方案


对于Req_time_taken1, 使用pandas.Series.str.split:

df['Req_time_taken1'] = df['Req_time_taken'].astype(str).str.rsplit(':', 1).str[0]

对于Req_time_taken2, 使用pandas.Series.dt.total_seconds:

df['Req_time_taken2'] = df['Req_time_taken'].dt.total_seconds().apply(lambda x: '%s hours %s minutes' % (x//3600, x%3600/60))
print(df)

输出:

      request        Req_Created        Req_Closed  Req_time_taken  \
0  REQ0079455  15/05/2019  16:51  23/05/2019 20:53 8 days 04:02:00   
1  REQ0079455   15/05/2019 16:51  23/05/2019 20:53 8 days 04:02:00   

  Req_time_taken1          Req_time_taken2  
0    8 days 04:02  196.0 hours 2.0 minutes  
1    8 days 04:02  196.0 hours 2.0 minutes  

推荐阅读