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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:06:02