Python实现不同列名Excel按行追加(非列合并)问题求解
问题核心原因
- pandas的
concat方法按行拼接时默认会按列名自动对齐,不同文件的列名不一致时就会合并所有列,缺失位置填充NaN,就是你遇到的自动合列问题 read_excel默认将文件第一行识别为列名,不会作为数据读取,若需要保留每个文件的表头作为内容追加,需要额外调整读取参数- 原有代码最后保存时使用的
ticker是循环最后一次的取值,只会保存为最后一个股票代码命名的文件,不符合多文件汇总的需求
修复后代码
import pandas as pd tickers = ['2crsi','abeo'] df_total = pd.DataFrame() for ticker in tickers: # 遍历四个文件夹的对应文件 for dir_name in ['./balance/pea/', './keyratio/pea/', './history/pea/', './cashflow/pea/']: df2 = pd.read_excel(f"{dir_name}{ticker}.xls", header=None) # 不识别表头,原表头会被读为第0行数据 # 若不需要保留每个文件的原有表头,解开下面这行的注释即可 # df2 = df2.iloc[1:].reset_index(drop=True) # 统一列名为数字,避免拼接时按原列名对齐 df2.columns = range(df2.shape[1]) df_total = pd.concat([df_total, df2], ignore_index=True) # 保存总表,不需要输出表头和行索引就保留后面两个参数 df_total.to_excel('all_merged.xls', header=False, index=False)
说明
默认代码会保留每个Excel的原有表头作为普通行追加,如果不需要保留表头,解开代码中注释标注的那行即可,拼接效果就是所有文件的数据行直接按顺序追加,不会合并不同名称的列。
内容的提问来源于stack exchange,提问作者bhawana
相关产品推荐
相关产品推荐

