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

Python 3中Pandas to_csv写入GzipFile报错问题求助

解决Python3中内存压缩Pandas DataFrame为gzip CSV的兼容问题

这个问题本质是Python2和Python3对文本/二进制流的严格区分导致的:在Python2里字符串和字节没有明确界限,直接往二进制模式的GzipFile写文本不会报错;但Python3中,df.to_csv()默认输出的是字符串(str类型),而gzip.GzipFile在wb模式下只接受字节(bytes类型),类型不匹配就会抛出错误。

下面给你两种可行的解决方案:

方案1:用TextIOWrapper包装二进制流(兼容原代码逻辑)

把二进制的GzipFile包装成文本模式的流,让to_csv可以正常写入文本内容:

from io import BytesIO, TextIOWrapper
import gzip
import pandas as pd

df = pd.DataFrame.from_dict({'a': ['a', 'b', 'c']})
s = BytesIO()

# 先创建二进制Gzip流,再包装成文本流
with gzip.GzipFile(fileobj=s, mode='wb', filename='file.csv') as gz_file:
    with TextIOWrapper(gz_file, encoding='utf-8') as text_file:
        df.to_csv(text_file)

s.seek(0)
content = s.getvalue()

方案2:直接用Pandas内置的压缩参数(更简洁)

Pandas的to_csv本身支持compression参数,不需要手动处理gzip模块,代码更简洁且不容易出错:

from io import BytesIO
import pandas as pd

df = pd.DataFrame.from_dict({'a': ['a', 'b', 'c']})
s = BytesIO()

# 直接指定compression='gzip',Pandas会自动处理压缩逻辑
df.to_csv(s, compression='gzip')

s.seek(0)
content = s.getvalue()

两种方案都能在Python3.6(Pandas 0.22.0)环境下正常运行,生成内存中的gzip压缩CSV字节内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:40:22