Pandas合并DataFrame列表时同名列未复用的问题求助
解决Pandas合并DataFrame时同名列未复用的问题
你的问题出在转置后的DataFrame列名是默认数字索引(0、1、2、3),而非你期望的Name列值。用pd.concat(axis=1)拼接时,只会按这些数字列名直接拼接,自然不会复用同名字段。
解决步骤
- 对每个转置后的DataFrame,将第一行(原
Name列内容)设为新列名 - 剔除转置后的
Name行,只保留Age行 - 纵向合并处理后的DataFrame,此时相同列名会自动对齐,缺失值填充
NaN
完整代码示例
import pandas as pd data2 = {'Name': ['A', 'B', 'C', 'D'], 'Age': [20, 21, 19, 18]} data3 = {'Name': ['B', 'C', 'D', 'E'], 'Age': [4, 6, 419, 128]} data4 = {'Name': ['D', 'E', 'F', 'G'], 'Age': [205, 721, 196, 148]} def process_df(df): # 转置DataFrame transposed = df.T # 将转置后的第一行(原Name列)设为列名 transposed.columns = transposed.iloc[0] # 只保留Age行,删除Name行 return transposed.iloc[1:] # 处理每个原始DataFrame df_list = [process_df(pd.DataFrame(data)) for data in [data2, data3, data4]] # 纵向合并,自动对齐列名 test_merge = pd.concat(df_list, axis=0) # 输出符合期望格式的结果 print("Name," + ",".join(test_merge.columns)) print(test_merge.to_csv(sep=',', na_rep='NaN', header=False))
输出结果
Name,A,B,C,D,E,F,G Age,20,21,19,18,NaN,NaN,NaN Age,NaN,4,6,419,128,NaN,NaN Age,NaN,NaN,NaN,205,721,196,148
内容的提问来源于stack exchange,提问作者DeepLearner123
相关产品推荐
相关产品推荐

