如何按列位置而非列名堆叠多个DataFrame并批量实现?
按列位置堆叠多列名不同的DataFrame
核心思路
要实现按列的位置而非列名拼接行,关键是先将所有DataFrame的列名统一(比如用第一个DataFrame的列名作为标准),之后用pd.concat()按行方向堆叠即可。
示例代码(两个DataFrame的情况)
import pandas as pd # 定义示例DataFrame df1 = pd.DataFrame( {"A": ["A0", "A1", "A2", "A3"], "B": ["B0", "B1", "B2", "B3"], "C": ["C0", "C1", "C2", "C3"], "D": ["D0", "D1", "D2", "D3"], }) df2 = pd.DataFrame( {"F": ["A0", "A1", "A2", "A3"], "G": ["B0", "B1", "B2", "B3"], "K": ["C0", "C1", "C2", "C3"], "Z": ["D0", "D1", "D2", "D3"], }) # 统一df2的列名与df1一致(按位置对应) df2.columns = df1.columns # 按行堆叠两个DataFrame,ignore_index=True重置行索引 result = pd.concat([df1, df2], axis=0, ignore_index=True) print(result)
输出结果:
A B C D 0 A0 B0 C0 D0 1 A1 B1 C1 D1 2 A2 B2 C2 D2 3 A3 B3 C3 D3 4 A0 B0 C0 D0 5 A1 B1 C1 D1 6 A2 B2 C2 D2 7 A3 B3 C3 D3
处理多个DataFrame的情况
如果有多个DataFrame(比如存放在列表中),可以通过批量统一列名后拼接:
# 假设多个DataFrame存放在列表dfs中 dfs = [df1, df2, df3, ...] # 替换为你的数据集列表 # 取第一个DataFrame的列名作为标准 standard_cols = dfs[0].columns # 批量统一所有DataFrame的列名(不修改原数据) standardized_dfs = [df.set_axis(standard_cols, axis=1) for df in dfs] # 堆叠所有标准化后的DataFrame final_result = pd.concat(standardized_dfs, axis=0, ignore_index=True)
补充说明
- 直接使用
pd.concat()不处理列名的话,会按列名对齐,导致非共同列名的位置出现NaN,不符合需求。 set_axis()方法会返回列名统一后的新DataFrame,比直接修改columns属性更安全,避免破坏原始数据。
内容的提问来源于stack exchange,提问作者Oscar Fernando CV
相关产品推荐
相关产品推荐

