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

使用Python pandas导入百万行大TXT文件如何仅读取2021年7月后数据提速

分块读取完全适配你的需求,不会遗漏数据

分块只是将大文件拆为多个小片段逐段遍历处理,所有行都会被覆盖,只要筛选规则正确,所有2021年7月及之后的行都会被保留,不管文件后续每日新增多少数据,都能完整匹配到符合要求的全部内容。


方案1:pandas分块读取+规则筛选(无额外依赖,易实现)

import pandas as pd
from datetime import datetime

basepath = r'\\SERVER\folder\file.TXT'
# 筛选阈值:2021年7月1日,可按需调整
cutoff_date = datetime(2021, 7, 1)
# 单块读取行数,可根据你的电脑内存大小调整,内存够可以设更大
chunk_size = 100000
filtered_list = []

for chunk in pd.read_csv(
    basepath, 
    sep=';', 
    on_bad_lines='skip', # 新版pandas替换原error_bad_lines参数,老版本可保留原写法
    header=None, 
    chunksize=chunk_size
):
    # 此处假设日期为第0列(第一列),请替换为你实际的日期列索引
    # format参数请替换为你文件中实际的日期格式,例:'%Y-%m-%d' / '%d/%m/%Y'
    chunk['date_col'] = pd.to_datetime(chunk[0], format='你的实际日期格式', errors='coerce')
    # 筛选符合要求的行
    valid_chunk = chunk[chunk['date_col'] >= cutoff_date].drop(columns=['date_col'])
    if not valid_chunk.empty:
        filtered_list.append(valid_chunk)

# 拼接所有符合条件的片段得到最终DataFrame
df = pd.concat(filtered_list, ignore_index=True)
df.head()

优化项(如果你的文件是按时间正序排列,即旧数据在前、新数据在后)

可以增加提前终止逻辑:当遍历到某一块的所有日期都大于等于筛选阈值时,后续所有块无需再做日期校验,直接全部追加即可,能进一步大幅提升读取速度。


方案2:系统级预过滤(速度更快,适合GB级超大文件)

先通过系统命令把符合条件的行筛选出来生成临时文件,再用pandas读取临时文件,处理速度远高于Python层的分块筛选。

  • Windows环境示例(假设日期格式为年-月-日,日期在每行开头):
findstr /r "^2021-0[7-9];^2021-[1-2][0-9];^202[2-9]" \\SERVER\folder\file.TXT > filtered_temp.txt
  • Linux/Mac环境示例(假设日期在第一列,格式为年-月-日):
awk -F ';' '{if (substr($1,1,7) >= "2021-07") print $0}' /path/to/file.TXT > filtered_temp.txt

筛选完成后直接读取临时文件即可:

df = pd.read_csv('filtered_temp.txt', sep=';', on_bad_lines='skip', header=None)

注意事项

  • 日期解析的format参数必须和文件内的日期格式完全匹配,避免出现解析错误导致数据被误过滤;
  • 可先抽取小范围数据做校验:对比分块读取和全量读取的同时间段数据行数,一致则说明筛选逻辑无误,后续新增数据只要格式不变就不会出现遗漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:27:04