You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

解决方案

采用"先读取为字符串,补全缺失时间,再解析"的思路,简洁且健壮,无需处理复杂的时区逻辑:

  1. 先读取CSV,不解析Time列为日期,保留原始字符串格式
  2. 对Time列做清洗:若字符串不含时间分隔符:,则补全 00:00:00
  3. 最后用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:08:19