pandas read_csv读取gzip压缩CSV仅返回6列问题排查
问题原因
最高概率的核心原因是CSV的第6列(valveOpen列)存在包裹整行后续内容的闭合引号:pandas默认将双引号视为字段包裹符,两个引号之间的所有逗号都会被识别为字段内容而非分隔符,因此会把第6列之后的所有内容都归为valveOpen列的值,最终得到仅6列的DataFrame,且行数和实际完全一致,解析过程不会抛出字段不匹配的错误。
其他可能原因:
- 传入的文件路径错误,实际读取的是另一个仅含6列的同名gzip压缩文件
- 数据行第6列附近存在
#字符,被pandas误识别为注释起始符(该情况通常会伴随字段数不匹配的警告) - pandas默认C解析引擎存在兼容问题,长行解析时异常截断
- 文件使用混合分隔符,前6列为逗号,后续列使用其他不可见分隔符
排查步骤
先跳过pandas,直接读取gzip文件的原始文本确认真实行结构,执行以下代码:
import gzip with gzip.open(thefile, 'rt', encoding='utf-8') as f: # 打印前3行的原始表示,所有不可见字符都会显式展示 for _ in range(3): print(repr(f.readline()))
观察输出:
- 如果数据行第6个字段前后存在双引号,且右引号出现在行尾,即可确认是引号识别问题
- 如果第6个逗号附近存在
#字符,即可确认是注释符误识别问题 - 如果原始行本身就只有6个逗号分隔的字段,说明文件路径错误,读错了文件
解决方案
- 针对引号识别问题:读取时关闭引号特殊解析规则
import csv processdf = pd.read_csv( thefile, compression='gzip', quoting=csv.QUOTE_NONE, # 不将引号视为字段包裹符 sep=',' # 显式指定逗号为分隔符 )
- 针对注释符误识别问题:读取时禁用注释解析
processdf = pd.read_csv( thefile, compression='gzip', comment=None )
- 若上述方案仍不生效,追加
engine='python'参数,使用兼容性更好的Python解析引擎替代默认C引擎即可。
内容的提问来源于stack exchange,提问作者frogbutt
相关产品推荐
相关产品推荐

