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

Python 3.7下用Pandas导入双竖线分隔大文件遇空列问题求助

搞定双竖线分隔大文件的Pandas导入问题

嘿,我来帮你解决这个头疼的导入问题!你现在的核心问题就是分隔符指定错了——文件用的是||双竖线,你却写了sep='|',这就导致Pandas把每个单竖线都当成分隔符,自然多出一堆空列。下面给你几个实用方案,兼顾正确性和大文件的性能:

1. 最直接:修正分隔符

Pandas的read_csv默认用正则解析分隔符,而|是正则里的特殊字符(代表“或”),所以得用转义后的双竖线。用raw字符串写起来最方便:

import pandas as pd
avm_sample = pd.read_csv(_avm_sample_file, sep=r'\|\|', low_memory=False)
  • 加low_memory=False是因为1GB的大文件很容易触发Pandas的类型推断警告,这个参数能帮你避开警告,还能让导入更稳定。
  • 如果你的字段里有用引号包裹的内容(比如某个值本身就包含||),记得先导入csv模块,再加quoting=csv.QUOTE_ALL或者指定quotechar参数,避免解析错误。

2. 针对超大文件的内存优化技巧

1GB的文件直接导入可能会吃满内存,给你两个优化方向:

分块读取处理

如果不需要一次性把全量数据放进内存,可以按块读取,逐块处理:

import pandas as pd
chunk_size = 100000  # 每次读10万行,你可以根据自己的内存情况调整
for chunk in pd.read_csv(_avm_sample_file, sep=r'\|\|', chunksize=chunk_size, low_memory=False):
    # 这里写你对每个数据块的处理逻辑,比如筛选、计算、写入数据库之类的
    process_your_data(chunk)

指定数据类型+按需导入列

提前给各列指定合适的数据类型,能大幅减少内存占用——比如把重复多的字符串列设为category类型,数值列用更小的类型(比如int32代替默认的int64);另外只导入你需要的列,也能省不少内存:

import pandas as pd
# 先手动定义你需要的列和对应类型,示例如下:
dtype_config = {
    'user_id': 'int32',
    'product_type': 'category',
    'price': 'float32'
}
avm_sample = pd.read_csv(
    _avm_sample_file,
    sep=r'\|\|',
    dtype=dtype_config,
    low_memory=False,
    usecols=['user_id', 'product_type', 'price']  # 只导入这三列,其他列直接跳过
)

3. 极端场景备选:用内置csv模块预处理

如果Pandas的导入速度还是达不到你的要求,可以试试用Python内置的csv模块先读取,再转成DataFrame。不过这个方法一般不如Pandas优化过的引擎快,只建议在极端情况用:

import pandas as pd
import csv

with open(_avm_sample_file, 'r', encoding='utf-8') as f:
    # 自定义双竖线作为分隔符
    reader = csv.reader(f, delimiter='||')
    # 把读取到的内容转成列表
    data_rows = list(reader)
# 第一行是表头,后面的是数据行
avm_sample = pd.DataFrame(data_rows[1:], columns=data_rows[0])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:19:56