如何将DataFrame中的timedelta转换为datetime.time格式
解决DataFrame多列时长转datetime.time格式的问题
针对DataFrame中多列存储的类似0 days 00:00:21格式的时长,可按以下步骤转换为hh:mm:ss格式的datetime.time类型:
1. 明确目标列
先确定需要转换的列,可直接指定列名列表:
target_cols = ['col1', 'col2'] # 替换成你的目标列名
如果不确定哪些列符合格式,可自动筛选字符串类型且匹配0 days hh:mm:ss格式的列:
import pandas as pd # 自动识别符合格式的字符串列 target_cols = df.columns[df.apply(lambda x: x.str.match(r'0 days \d{2}:\d{2}:\d{2}').all())]
2. 执行格式转换
分两种数据类型场景处理:
场景一:列数据为字符串类型
先将字符串转为timedelta类型,再提取datetime.time对象:
for col in target_cols: # 字符串转timedelta df[col] = pd.to_timedelta(df[col]) # 提取time部分 df[col] = df[col].dt.time
场景二:列数据已为timedelta类型
直接提取datetime.time对象即可:
for col in target_cols: df[col] = df[col].dt.time
效果说明
转换后,列中元素会变为datetime.time类型,显示形式为hh:mm:ss,不再包含0 days前缀。若原时长超过24小时,dt.time会自动取模24小时后返回时间(例如1 days 02:30:00会转为02:30:00)。
内容的提问来源于stack exchange,提问作者Grzegorz Z
相关产品推荐
相关产品推荐

