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