Python字典转DataFrame导出CSV报numpy.ndarray不可调用错误求解

问题描述
现有名为AllDict_WC、包含4个键的字典,需要将每个键对应的值转换为DataFrame并导出,初始编写的代码如下:
for key in AllDict_WC: TempDF = pd.DataFrame.from_dict(AllDict_WC[key],orient='index') TempDF.to_csv("C:\\Users\\iaqurban/Desktop\\HW2\\WC.csv",sheet_name = "%s""%key")
代码执行到第2行时抛出如下错误:
TypeError: 'numpy.ndarray' object is not callable
错误原因
- 报错核心触发点:之前运行的代码里存在把
pd.DataFrame赋值为numpy数组的操作(比如写过类似pd.DataFrame = 某numpy数组变量的测试代码),覆盖了pandas原生的DataFrame类定义。此时再调用pd.DataFrame.from_dict,解释器会认为你在尝试调用一个数组对象,而数组是不可调用的,就会抛出这个类型错误。如果是用Jupyter Notebook/Lab这类带变量缓存的环境,只要没重启内核,这个覆盖就会一直生效。 - 原代码还有3个逻辑问题,就算解决了上面的覆盖问题也跑不通:
to_csv是导出纯文本CSV格式的方法,本身没有sheet_name参数,这个参数是导出Excel文件的to_excel方法才支持的——CSV是单表纯文本格式,根本不存在多工作表的概念。- 循环中导出的文件名写死为
WC.csv,每次循环写入都会覆盖上一次的结果,最后文件里只会保留最后一个键对应的数据。 - 文件名里的字符串格式化写法
"%s""%key"语法错误,无法正确把键名拼接到文件名中,同时路径里混用了正斜杠和反斜杠,容易触发路径解析异常。
解决方法
- 先排查并删除所有给
pd.DataFrame重新赋值的代码,如果用的是带变量缓存的交互环境(比如Jupyter、PyCharm的Python Console),直接重启Python内核,保证pd.DataFrame是pandas原生的类,没有被覆盖。 - 根据自己的导出需求选择对应代码:
方案1:每个键对应导出为独立CSV文件
import pandas as pd import os # 统一指定输出文件夹,自动处理路径拼接 output_dir = r"C:\Users\iaqurban\Desktop\HW2" os.makedirs(output_dir, exist_ok=True) for key in AllDict_WC: TempDF = pd.DataFrame.from_dict(AllDict_WC[key], orient='index') # 把键名拼到文件名里,避免文件互相覆盖 output_path = os.path.join(output_dir, f"WC_{key}.csv") TempDF.to_csv(output_path, encoding='utf-8-sig')
方案2:所有键的内容导出为同一个Excel文件的不同工作表
import pandas as pd output_path = r"C:\Users\iaqurban\Desktop\HW2\WC.xlsx" with pd.ExcelWriter(output_path) as writer: for key in AllDict_WC: TempDF = pd.DataFrame.from_dict(AllDict_WC[key], orient='index') # sheet_name参数仅在导出Excel时有效 TempDF.to_excel(writer, sheet_name=str(key), index=True)
内容的提问来源于stack exchange,提问作者Ibraheem Qurban
相关产品推荐
相关产品推荐

