Python Pandas实现多列数据依次追加堆叠到第一列的方法咨询
核心代码实现
1. 按你构思的迭代逻辑实现
import pandas as pd # 读取CSV文件,统一转为字符串格式避免不同列类型冲突,空值填充为空字符串 df = pd.read_csv("your_file.csv", dtype=str).fillna("") # 统计总列数 col_total = df.shape[1] # 获取第一列列名 first_col = df.columns[0] # 从第二列开始迭代,共迭代 col_total-1 次 for idx in range(1, col_total): # 取出当前列数据,重命名为第一列列名 current_col = df.iloc[:, idx].rename(first_col) # 追加到原DataFrame末尾 df = pd.concat([df, current_col.to_frame()], ignore_index=True) # 仅保留第一列作为结果 result = df[[first_col]] # 如需输出到文件,执行下方代码即可 # result.to_csv("output.csv", index=False)
2. 更优的无迭代实现方案
不需要手动循环迭代,使用Pandas内置的melt函数即可实现需求,性能和代码简洁度都远高于手动迭代方案,尤其适合数百列的大文件场景:
import pandas as pd df = pd.read_csv("your_file.csv", dtype=str).fillna("") first_col = df.columns[0] # melt默认按列顺序将所有列的值垂直合并为一列 result = pd.melt(df, value_name=first_col)[[first_col]]
方案说明
melt是Pandas专门用于宽表转长表的内置函数,会按照列的原始顺序,先取第一列所有行的值,再取第二列所有行的值,以此类推,完全匹配你的堆叠需求- 统一指定
dtype=str和fillna("")是为了避免不同类型的列合并时出现格式异常,同时保留原始空值为空白内容,符合输出要求 - 无迭代方案避免了循环拼接DataFrame的性能损耗,数百列的场景下运行速度提升非常明显
内容的提问来源于stack exchange,提问作者an1que
相关产品推荐
相关产品推荐

