我有许多日期和时间列对(每个大约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')
在上面的代码中。