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

在Pandas DataFrame中调整Excel来源Numpy数组列顺序报错解决

解决"DataFrame object is not callable"错误及列顺序调整问题

问题描述

我通过Pandas将Excel数据导入为Numpy数组,需将列顺序从['A','B','C','D','E','F','G','H']调整为['C','B','A','D','F','H','E','G'],但运行代码时出现“DataFrame object is not callable”错误,相关代码如下:

# importing python libraries
import pandas as pd
import numpy as np

# reading source excel files and storing into two DataFrames
df1 = pd.read_excel('filepath')

# reading data by row
datax = []

def getRows(excel_file, sheet_name, start_row = 1):
    excel_data = pd.read_excel(excel_file, sheet_name = sheet_name, header=None)
    #print(excel_data)
    size = excel_data.shape
    #print(size)
    row_num = size[0]
    for i in range(start_row, row_num):
        data = excel_data.iloc[i].values.tolist()
        datax.append(data)
    return datax

getRows("filepath", "sheetname", 0)

a = np.array(datax)

df = pd.DataFrame(a[:,[0,1,2,4,6,9,13,14]], columns = ['A','B','C','D','E','F','G','H'])


df2 = df(pd.DataFrame(a[:,[0,1,2,4,6,9,13,14]], columns =['C','B','A','D','F','H','E','G']))
df2.to_excel("filepath")

print(df2)

错误原因

  • 核心错误在df2 = df(pd.DataFrame(...))这行:df是已经创建好的DataFrame对象,你却用函数调用的语法(括号)去操作它,这就触发了"DataFrame object is not callable"错误。
  • 代码存在冗余:已经将数组转为df,没必要重复基于原数组创建新DataFrame来调整列顺序。

修正方案

调整DataFrame列顺序的最简方式,是直接用目标列名列表对已有DataFrame进行索引,不需要重复创建DataFrame。

优化后的完整代码

import pandas as pd
import numpy as np

# 读取Excel数据并按行提取
datax = []

def getRows(excel_file, sheet_name, start_row=0):
    excel_data = pd.read_excel(excel_file, sheet_name=sheet_name, header=None)
    row_num = excel_data.shape[0]
    for i in range(start_row, row_num):
        data = excel_data.iloc[i].values.tolist()
        datax.append(data)
    return datax

getRows("filepath", "sheetname", 0)

a = np.array(datax)

# 创建初始DataFrame,指定列名
df = pd.DataFrame(a[:,[0,1,2,4,6,9,13,14]], columns=['A','B','C','D','E','F','G','H'])

# 直接通过列名列表调整顺序(核心修正)
df2 = df[['C','B','A','D','F','H','E','G']]

# 导出到Excel,建议加上index=False避免导出索引列
df2.to_excel("output_filepath.xlsx", index=False)
print(df2)

进一步简化代码

可以去掉冗余的Numpy数组转换和全局变量,直接用Pandas完成所有操作:

import pandas as pd

# 直接读取Excel,选择需要的列并指定初始列名
df = pd.read_excel("filepath", sheet_name="sheetname", header=None)
selected_df = df.iloc[:, [0,1,2,4,6,9,13,14]]
selected_df.columns = ['A','B','C','D','E','F','G','H']

# 调整列顺序
df2 = selected_df[['C','B','A','D','F','H','E','G']]

# 导出结果
df2.to_excel("output_filepath.xlsx", index=False)
print(df2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:15:36