使用Pandas读取CSV中ISO 8601日期并筛选指定时间前的行
问题根因
你写的筛选语句不生效主要有两个问题:
- 筛选条件右侧的
2014-01-02T00:00:00.000没有加引号,Python会将其识别为非法变量名,直接抛出语法错误,不会被解析为时间类型 parse_dates=True只会自动解析看起来像时间的列,如果你的CSV里时间列的命名不符合pandas自动识别规则,有可能解析失败,列类型还是字符串格式的object类型
正确实现方案
1. 稳妥读取CSV并解析时间列
读取时明确指定要解析的时间列,避免自动解析失败:
import pandas as pd # 明确指定epoch列需要解析为时间格式 sat0 = pd.read_csv("你的文件路径.csv", parse_dates=["epoch"]) # 可选验证步骤:输出列类型,确认解析成功 print(sat0["epoch"].dtype) # 输出结果为 datetime64[ns] 即为解析正常
2. 执行时间筛选
用引号包裹时间阈值字符串,pandas会自动匹配ISO 8601格式做时间对比:
# 写法1:直接用字符串对比(pandas自动隐式转换,写法简洁) sat0 = sat0[sat0["epoch"] < "2014-01-02T00:00:00.000"] # 写法2:显式转换阈值为时间类型(更严谨,避免隐式转换异常) cutoff = pd.to_datetime("2014-01-02T00:00:00.000") sat0 = sat0[sat0["epoch"] < cutoff]
异常情况处理
如果读取后epoch列还是object类型,可以手动转换后再筛选:
sat0["epoch"] = pd.to_datetime(sat0["epoch"]) sat0 = sat0[sat0["epoch"] < "2014-01-02"] # 阈值可以省略时分秒,pandas会默认将"2014-01-02"识别为当天00:00:00
内容的提问来源于stack exchange,提问作者Ahmed Malik
相关产品推荐
相关产品推荐

