如何确保Pandas合并多Excel后的DataFrame列头按指定顺序排列?
问题:合并多份Excel文件后列顺序不一致,如何强制指定核心列顺序?
我尝试导入多个Excel文件并把所有数据整理成列表,用了下面这段代码:
import os import pandas as pd cwd = os.path.abspath('') files = os.listdir(cwd) df = pd.DataFrame() for file in files: if file.endswith('.XLSX'): df = df.append(pd.read_excel(file), ignore_index=True) df = df.where(df.notnull(), None) array = df.values.tolist() print(array)
这些Excel文件的列头包含product、cost、used_by、prime、name、price、gender、yes or no等字段,但列头顺序不统一:有的是product、cost、used_by、prime,有的是cost、product、prime、used_by。
虽然Pandas会自动匹配列头和对应数据,但在两台设备上运行相同代码和数据时,得到的结果列顺序却不一样——一台是第一种顺序,另一台是第二种。我希望添加代码确保DataFrame的列头始终按product、cost、used_by、prime的顺序排列,其余列的顺序可以默认,求对应的Python实现代码。
解决方案:指定核心列顺序,保留其余列
要解决这个问题,只需要在合并完所有数据后,手动指定列的排列顺序即可。核心思路是:先定义好你想要固定顺序的核心列,然后把剩下的列按原有顺序追加到后面,最后重新排列DataFrame的列。
修改后的完整代码如下:
import os import pandas as pd cwd = os.path.abspath('') files = os.listdir(cwd) df = pd.DataFrame() for file in files: if file.endswith('.XLSX'): # 读取单份Excel文件,合并到总DataFrame df = df.append(pd.read_excel(file), ignore_index=True) # 定义需要固定顺序的核心列 core_columns = ['product', 'cost', 'used_by', 'prime'] # 获取所有列中除核心列外的其他列,保留原有顺序 other_columns = [col for col in df.columns if col not in core_columns] # 组合成最终的列顺序:核心列在前,其他列在后 final_columns = core_columns + other_columns # 重新排列DataFrame的列 df = df[final_columns] # 空值替换为None并转为列表 df = df.where(df.notnull(), None) array = df.values.tolist() print(array)
关键代码说明:
core_columns:明确指定你想要固定顺序的核心列,这里就是你要求的product、cost、used_by、prime。other_columns:通过列表推导式筛选出所有非核心列,并且保留它们在合并后的DataFrame中原有的出现顺序,不用额外调整。final_columns:把核心列和其他列拼接起来,形成最终的列顺序——核心列按指定顺序排在前面,其他列跟在后面。df = df[final_columns]:这一步是核心操作,通过索引重新排列DataFrame的列,确保不管合并后的原始列顺序是什么,最终都会强制按照你设定的规则来排列。
这样处理后,不管在哪个设备上运行,最终的列顺序都会保持一致,完美解决你遇到的问题。
内容的提问来源于stack exchange,提问作者zhangruibo101
相关产品推荐
相关产品推荐

