使用pandas导入URL返回的gzip压缩CSV时出现循环导入及read_json缺失报错
报错原因及解决方法
你遇到的AttributeError: partially initialized module 'pandas' has no attribute 'read_json'报错,和传入的读取参数无关,本质是Python导入pandas模块时出现了循环导入冲突,按以下顺序排查即可解决:
- 检查本地运行的Python脚本文件名,绝对不要命名为
pandas.py、json.py这类和Python标准库、pandas依赖重名的名称——这种命名会让Python优先加载你写的本地文件,而非真实的pandas第三方模块,直接导致模块初始化中断。排查到这类命名问题后,把脚本改成无冲突的名称,同时删除同目录下__pycache__缓存文件夹内的同名临时文件即可。 - 如果文件名无冲突,检查pandas的安装完整性:在终端执行
pip uninstall pandas卸载损坏的安装包,重新执行pip install pandas openpyxl完成干净安装,解决安装文件缺失导致的模块初始化失败问题。 - 检查项目内的自定义模块导入链路,删除无意义的反向导入逻辑,避免形成“当前脚本导入自定义模块、自定义模块又反向导入当前脚本”的导入闭环。
gzip压缩CSV数据源的正确读取实现
你当前使用pd.read_json读取这个接口本身就存在方法不匹配的问题——该接口返回的是gzip压缩格式的CSV,并非JSON格式数据,pandas原生支持直接读取网络侧的gzip压缩CSV流,不需要手动解压:
- 用
pd.read_csv替换原有的pd.read_json方法,pandas会自动识别响应头的gzip压缩标识完成流数据解压解析。 - 导出Excel时必须安装
openpyxl写入引擎,否则df.to_excel()会报缺少依赖的错误。
可直接运行的完整代码如下:
import pandas as pd url = "https://api.kite.trade/instruments" # 自动识别网络gzip流的压缩格式,直接解析为DataFrame df = pd.read_csv(url, compression="gzip") # 导出Excel,关闭自动生成的索引列写入,指定openpyxl作为写入引擎 df.to_excel("kite_instruments.xlsx", index=False, engine="openpyxl") print("Program executed successfully")
运行优化提示
- 网络不稳定时可在读取参数里增加超时配置,避免因请求超时中断流程:
pd.read_csv(url, compression="gzip", storage_options={"timeout": 30}) - 不需要额外把接口返回的二进制数据先存为本地gzip文件再读取,pandas直接支持内存流解析,可减少不必要的磁盘IO开销。
内容的提问来源于stack exchange,提问作者Amely
相关产品推荐
相关产品推荐

