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

如何在Jupyter Notebook中用Python删除CSV指定日期前的数据?

处理百万行CSV:删除2010年1月1日0点前的数据

先说说你代码的问题

你写的df [(df['Date Time'].dt.year < 2010-0o1)]有两个明显错误:

  1. 0o1是Python的八进制表示,对应十进制的1,所以2010-0o1实际是2009,逻辑上只筛选了年份小于2009的行,完全没覆盖「2010年1月1日0点前」的完整条件(比如2009年12月31日的行也应该被删除)。
  2. 只判断年份太粗糙,必须用完整的日期时间做比较,否则会漏掉2010年1月1日0点前的临界数据。

另外,如果你没先把Date Time列转换成datetime类型就用.dt.year,也会触发报错——这大概率是你看到超长报错的原因。

正确处理步骤(分两种场景)

场景1:内存足够直接加载文件

如果你的电脑内存能装下百万行数据,直接用以下代码:

import pandas as pd

# 读取CSV文件
df = pd.read_csv('你的文件名.csv')

# 把'Date Time'列转为datetime类型,务必根据你文件的日期格式调整format参数
# 比如你的日期是'2009-12-31 23:59'就用'%Y-%m-%d %H:%M',是'12/31/2009 11:59 PM'就用'%m/%d/%Y %I:%M %p'
df['Date Time'] = pd.to_datetime(df['Date Time'], format='%Y-%m-%d %H:%M:%S')

# 定义要保留的起始时间
cutoff_time = pd.to_datetime('2010-01-01 00:00:00')

# 筛选保留时间在cutoff之后的行
df_filtered = df[df['Date Time'] >= cutoff_time]

# 保存处理后的文件
df_filtered.to_csv('过滤后的文件名.csv', index=False)

场景2:内存不够,分块处理大文件

百万行CSV如果内存吃不消,用分块读取的方式,避免一次性加载整个文件:

import pandas as pd

cutoff_time = pd.to_datetime('2010-01-01 00:00:00')
chunk_size = 100000  # 每次处理10万行,可根据你的内存情况调整大小

# 打开输出文件,分块写入
with open('过滤后的文件名.csv', 'w') as output_file:
    first_write = True
    for chunk in pd.read_csv('你的文件名.csv', chunksize=chunk_size):
        # 转换当前块的日期列
        chunk['Date Time'] = pd.to_datetime(chunk['Date Time'], format='%Y-%m-%d %H:%M:%S')
        # 筛选符合条件的行
        filtered_chunk = chunk[chunk['Date Time'] >= cutoff_time]
        # 第一块写入表头,后续块不写
        filtered_chunk.to_csv(output_file, index=False, header=first_write)
        first_write = False

关键注意事项

  • 一定要匹配format参数:如果你的日期格式和示例不一样,必须调整pd.to_datetime里的format,否则会出现日期转换失败的报错。
  • 筛选逻辑是「保留>=2010-01-01 00:00:00」的数据,也就是自动删除了这个时间点之前的所有行,符合你的需求。

内容的提问来源于stack exchange,提问作者demi_k

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:25:42