连接许多时间和日期列



我有许多日期和时间列对(每个大约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           

我想将每个日期/时间列对合并为一列。我的第一个倾向是将LIKE语句用于dataframe中的时间和日期列,方法是在它们自己不同的列表中提取日期/时间,然后循环使用它们来执行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"(,并用空格作为分隔符组合相应的日期/时间列。将组合分析为日期时间。

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

为了在一定程度上实现故障安全,您可以在尝试组合之前添加检查,以确保给定前缀存在日期和时间列

万一你约会中的一些元素&时间列无法解析为datetime,设置errors='coerce'可能是一个选项,对于无法解析的元素(例如(,则使用NaT

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

在上面的代码中。

最新更新