Python中如何将时间区间字符串转换为datetime类型?
解决时间列转换为datetime的问题
你的原代码报错大概率是因为数据中存在格式不匹配的行,或是pandas对这种包含时间区间的长字符串转换时出现隐性问题。推荐通过**提取时间区间的单个时间点(起始/结束)**拆分转换,这种方式更稳定高效,具体方案如下:
方案1:提取起始时间并转换
由于你的数据是15分钟间隔的统计数据,通常用区间的起始时间作为时间戳就足够:
# 拆分出时间区间的起始部分 dftotalload2020['start_time'] = dftotalload2020['Time (CET/CEST)'].str.split(' - ').str[0] # 转换为datetime类型 dftotalload2020['start_time'] = pd.to_datetime(dftotalload2020['start_time'], format='%d.%m.%Y %H:%M')
方案2:同时提取起始和结束时间
如果需要保留区间的两个时间点,可以拆分出两列分别转换:
# 拆分起始、结束时间为新列 dftotalload2020[['start_time', 'end_time']] = dftotalload2020['Time (CET/CEST)'].str.split(' - ', expand=True) # 分别转换为datetime类型 dftotalload2020['start_time'] = pd.to_datetime(dftotalload2020['start_time'], format='%d.%m.%Y %H:%M') dftotalload2020['end_time'] = pd.to_datetime(dftotalload2020['end_time'], format='%d.%m.%Y %H:%M')
排查原代码报错原因
如果一定要用原格式直接转换,可以先定位格式异常的行:
# 标记转换失败的行(返回NaN) dftotalload2020['time_converted'] = pd.to_datetime( dftotalload2020['Time (CET/CEST)'], format='%d.%m.%Y %H:%M - %d.%m.%Y %H:%M', errors='coerce' ) # 筛选出转换失败的行 invalid_rows = dftotalload2020[dftotalload2020['time_converted'].isna()] print(invalid_rows)
查看这些异常行的时间格式,修正后再重新执行原代码即可。
内容的提问来源于stack exchange,提问作者J1999
相关产品推荐
相关产品推荐

