在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
相关产品推荐
相关产品推荐

