Python如何将urllib.request.open()获取的csv.gz文件读取为pandas DataFrame
读取远程csv.gz字节流为DataFrame的方案
核心结论
你不需要手动将获取到的bytes类型内容转utf-8编码,手动解码压缩后的二进制内容本身就是错误操作,出现编码报错是正常现象,使用忽略错误的方式会导致数据丢失,完全不推荐。
pandas自带压缩文件读取能力,配合标准库可以直接读取你拿到的bytes流生成DataFrame,不需要额外解码步骤。
可直接运行的实现方法
方法1:兼容所有pandas版本
借助gzip标准库解压字节流,直接传入pd.read_csv即可:
import pandas as pd import gzip import urllib.request # 你的原有逻辑,获取远程文件响应 response = urllib.request.open("你的csv.gz文件远程地址") # 直接解压字节流后读取 with gzip.open(response, "rb") as f: df = pd.read_csv(f)
方法2:pandas 1.3及以上版本简化写法
pd.read_csv原生支持gzip压缩的类文件对象,无需额外导入gzip:
import pandas as pd import urllib.request response = urllib.request.open("你的csv.gz文件远程地址") df = pd.read_csv(response, compression="gzip")
注意事项
- 你拿到的bytes是gzip压缩后的二进制内容,不是纯文本csv,直接解码必然出现编码错误,属于正常现象,无需尝试手动解码
- 如果读取后出现csv内容的编码问题,可给
pd.read_csv补充encoding参数指定编码格式,比如encoding="utf-8"、encoding="gbk"等,不要使用忽略错误的解码方式避免数据丢失 - 整个流程不需要将文件落地到本地,全程在内存中完成处理
内容的提问来源于stack exchange,提问作者Lucía Osorio
相关产品推荐
相关产品推荐

