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

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

enter description here

问题描述

现有名为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"语法错误,无法正确把键名拼接到文件名中,同时路径里混用了正斜杠和反斜杠,容易触发路径解析异常。
解决方法
  1. 先排查并删除所有给pd.DataFrame重新赋值的代码,如果用的是带变量缓存的交互环境(比如Jupyter、PyCharm的Python Console),直接重启Python内核,保证pd.DataFrame是pandas原生的类,没有被覆盖。
  2. 根据自己的导出需求选择对应代码:

方案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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:19:07