
本文介绍如何使用 pandas.read_csv() 正确解析含不完整时间格式(如仅有日期无时间,或混用“DD.MM.YYYY HH:MM:SS”与“DD.MM.YYYY”)的时序 CSV 文件,并自动补全缺失的 00:00:00 时间,确保 Time 列成功转换为 datetime64[ns] 类型。
本文介绍如何使用 `pandas.read_csv()` 正确解析含不完整时间格式(如仅有日期无时间,或混用“dd.mm.yyyy hh:mm:ss”与“dd.mm.yyyy”)的时序 csv 文件,并自动补全缺失的 00:00:00 时间,确保 `time` 列成功转换为 `datetime64[ns]` 类型。
在工业测量、能源监控等场景中,CSV 日志常因设备导出逻辑缺陷导致时间列不一致:多数行含完整时间(如 27.12.2023 23:50:00),但整点(尤其是午夜 00:00:00)仅保留日期部分(如 28.12.2023)。若直接使用 parse_dates=['Time'],Pandas 默认会将纯日期行解析为 NaT(Not a Time),破坏时间序列连续性。
核心解决方案:启用 date_format='mixed'
Pandas 2.0+ 引入的 date_format='mixed' 参数可智能识别同一列中混合的时间格式(包括 ISO、本地化日期、带/不带时间的日期),并自动推断缺失时间部分——对仅含 DD.MM.YYYY 的行,默认补全为当日 00:00:00,完美匹配业务语义。
✅ 推荐读取代码:
import pandas as pd
df = pd.read_csv(
'C:/Python/Input/measured_values.csv',
sep='\t',
decimal=',',
encoding='unicode_escape',
parse_dates=['Time'],
dayfirst=True, # 确保 DD.MM.YYYY 被正确识别
date_format='mixed' # 关键!启用混合格式自动解析
)⚠️ 注意事项:
- 移除 skiprows=1:若首行为列名(非数据),skiprows=1 会跳过标题行导致列错位;应让 Pandas 自动识别表头(默认 header=0)。仅当 CSV 存在多余注释行时才需谨慎设置 skiprows。
- 验证解析结果:务必检查 df['Time'].dtypes 是否为 datetime64[ns],并用 df['Time'].isna().sum() 确认无 NaT。
- 兼容性要求:date_format='mixed' 需 Pandas ≥ 2.0.0;旧版本可降级使用 date_parser 自定义函数,但效率与鲁棒性较低。
? 进阶提示:若数据跨越夏令时切换日,date_format='mixed' 仍能正确处理时区无关的本地时间序列;如需时区感知,请在解析后调用 .dt.tz_localize()。
立即学习“Python免费学习笔记(深入)”;
该方法简洁、高效且无需手动插值或循环修正,是处理此类不规则时间戳的首选实践。


















