使用pyarrow引擎读取TSV文件报错,默认引擎正常的问题求助
解决pyarrow引擎读取TSV文件报错的方案
1. 手动指定列名或列数
pyarrow的列推断逻辑比pandas默认引擎更严格,遇到空行或特殊开头时容易卡壳。直接指定列信息就能解决:
# 已知列名的情况 data = pd.read_csv(path, sep='\t', engine="pyarrow", names=['列1', '列2', '列3']) # 只知道列数的情况,生成占位列名 data = pd.read_csv(path, sep='\t', engine="pyarrow", names=[f'列{i}' for i in range(3)])
2. 处理空白行
检查文件是否有开头/结尾的空行,或者中间的空白块。可以显式开启跳过空行,或者直接跳过指定行数:
# 强制跳过所有空行 data = pd.read_csv(path, sep='\t', engine="pyarrow", skip_blank_lines=True) # 跳过开头2行空行 data = pd.read_csv(path, sep='\t', engine="pyarrow", skiprows=2)
3. 自定义pyarrow解析规则
用pyarrow_csv_args传递专属配置,比如强制读取所有行来推断列,避免因少量空行导致的推断失败:
import pyarrow.csv as pv parse_options = pv.ParseOptions(delimiter='\t', infer_schema_length=0) data = pd.read_csv(path, sep='\t', engine="pyarrow", pyarrow_csv_args={'parse_options': parse_options})
4. 统一文件编码和换行符
如果文件编码或换行符不标准,pyarrow的兼容度不如默认引擎,手动指定相关参数:
data = pd.read_csv(path, sep='\t', engine="pyarrow", encoding='utf-8', lineterminator='\n')
内容的提问来源于stack exchange,提问作者curious
相关产品推荐
相关产品推荐

