连接多个时间和日期列

Concatenating many time and date columns

我有许多共享相同前缀的日期和时间列对(每个大约 15 个),即。 SH 或 DEL。这些列都是 dtype 对象,即。细绳。所有列都属于同一个 Dataframe。这是两个这样的对的示例:

  SH_DATE         DEL_DATE          SH_TIME      DEL_TIME                

 2020-04-22      2020-04-27         19:42:00     19:11:00           
 2020-04-22      2020-04-25         19:42:00     19:26:00           
 2020-04-24      2020-04-24         09:55:00     09:55:00           
 2020-04-24      2020-04-26         14:27:00     14:27:00           

我想将每个 date/time 列对合并为一个列。我的第一个倾向是在 dataframe 中对时间和日期列使用 LIKE 语句,方法是在它们自己的不同列表中提取 date/time,然后循环遍历它们以获得 pd.concat功能,但还没有找到解决方案。

所需输出示例:

     SH_DATETIME            DEL_DATETIME                        

 2020-04-22 19:42:00     2020-04-27 19:11:00                
 2020-04-22 19:42:00     2020-04-25 19:26:00                    
 2020-04-24 09:55:00     2020-04-24 09:55:00                    
 2020-04-24 14:27:00     2020-04-26 14:27:00          

确定唯一的列名称前缀(例如 'SH' 或 'DEL')并将相应的日期/时间列与 space 作为分隔符组合。解析合并后的 to datetime.

pfxs = df.columns.to_series().str.replace('_TIME', '').str.replace('_DATE', '').unique()

for p in pfxs:
    if f'{p}_DATE' in df.columns and f'{p}_TIME' in df.columns:
        df[f'{p}_DATETIME'] = pd.to_datetime(df[f'{p}_DATE']+' '+df[f'{p}_TIME'])
df
      SH_DATE    DEL_DATE  ...         SH_DATETIME        DEL_DATETIME
0  2020-04-22  2020-04-27  ... 2020-04-22 19:42:00 2020-04-27 19:11:00
1  2020-04-22  2020-04-25  ... 2020-04-22 19:42:00 2020-04-25 19:26:00
2  2020-04-24  2020-04-24  ... 2020-04-24 09:55:00 2020-04-24 09:55:00
3  2020-04-24  2020-04-26  ... 2020-04-24 14:27:00 2020-04-26 14:27:00

为了使这有点故障安全,您可以添加检查以确保在尝试合并之前存在给定前缀的日期 时间列。

如果日期和时间列中的某些元素无法解析为日期时间,设置 errors='coerce' 可能是一个选项,为无法解析的元素留下 NaT,例如

pd.to_datetime(df[f'{p}_DATE']+' '+df[f'{p}_TIME'], errors='coerce')

在上面的代码中。