Python Pandas读取含缺失00:00时间戳的时序CSV文件问题
解决CSV时间戳缺失00:00部分的解析问题
问题场景
读取测量值时间序列CSV时,遇到导出的时间戳会省略00:00的时间部分,导致pandas的parse_dates参数无法正确解析该列。
CSV片段示例:
Time NS Status u12 u23 u31 p1 q1 27.12.2023 23:30:00 0 0 20854,6 20482,8 20706,1 7599130 -2050710 27.12.2023 23:40:00 0 0 20882,8 20510,9 20728,6 7494070 -2078320 27.12.2023 23:50:00 0 0 20819,2 20448,5 20674,7 7672400 -1929610 28.12.2023 0 0 20792,9 20413,2 20645,9 7565910 -1942710 28.12.2023 00:10:00 0 0 20768,6 20368,6 20613,4 7174330 -2002890
当前使用的代码:
df = pd.read_csv('C:/Python/Input/measured_values.csv', sep = '\t', decimal=',', skiprows=1, encoding='unicode_escape', parse_dates=['Time'], dayfirst=True)
解决方案
采用"先读取为字符串,补全缺失时间,再解析"的思路,简洁且健壮,无需处理复杂的时区逻辑:
- 先读取CSV,不解析
Time列为日期,保留原始字符串格式 - 对
Time列做清洗:若字符串不含时间分隔符:,则补全00:00:00 - 最后用
pd.to_datetime解析为datetime64[ns]类型
完整代码:
import pandas as pd # 读取CSV,暂不解析Time列 df = pd.read_csv('C:/Python/Input/measured_values.csv', sep='\t', decimal=',', skiprows=1, encoding='unicode_escape', dtype={'Time': str}) # 补全缺失的00:00时间部分,同时清理多余空格 df['Time'] = df['Time'].str.strip().apply(lambda x: x if ':' in x else f"{x} 00:00:00") # 解析为datetime类型 df['Time'] = pd.to_datetime(df['Time'], dayfirst=True) # 验证结果 print(df['Time'].dtype) # 输出: datetime64[ns] print(df['Time'])
说明
- 该方法通过字符串判断补全缺失内容,避免了手动生成时间序列的复杂度,同时兼容正常格式的时间戳
str.strip()用于处理时间列中可能存在的多余空白(如示例中28.12.2023后的空白)dayfirst=True保证DD.MM.YYYY格式的日期被正确解析
内容的提问来源于stack exchange,提问作者mr_t
相关产品推荐
相关产品推荐

