繁体   English   中英

如何使用 Pandas 将具有不同标题的多个 Excel 文件合并到一张表中?

[英]How can I combined multiple Excel files with different headers into one sheet using Pandas?

我必须合并几个文件(大约 40 个),这些文件有几种不同的标题(即,根据文件在不同列中的标题,某些文件的几个列名不会出现在其他文件中,等等)。

我有一个用于合并文件的 python 脚本,但它只是将它们按原始文件中的相同顺序放置。 我希望这个脚本能够在出现新列名时添加一个新列,并将该列名的所有未来出现映射到相应的行。

下面是我想要的输出示例,其中“总佣金”和“付款”列仅显示在 2019 年 7 月的文件中,而“%”和“$”列仅显示在 2018 年 6 月的文件中(以及所有显示在两列中的其他列):

Excel 组合示例

*每个文件用于不同的“时期”。

当前代码:

import pandas as pd
import os
import tkinter as tk
from tkinter import filedialog

root = tk.Tk()
root.withdraw()

in_path = filedialog.askdirectory()
listing = os.listdir(in_path)

files_xlsx = [f for f in listing if f[-4:] == 'xlsx']

df = pd.DataFrame()

for infile in listing:
    file_data = pd.read_excel(in_path + '/' + infile,
                              header=0,
                              encoding = "ANSI")
    df = df.append(file_data, sort=False)

out_path = in_path + ' Combined.xlsx'

writer = pd.ExcelWriter(out_path, engine='xlsxwriter')

df.to_excel(writer,
            sheet_name='Combined',
            index=False,
            header=None)

writer.save()

谢谢你的帮助,如果我能提供更多细节,请告诉我。

要让标题写入您的 xlsx 文件,您可以在使用 df.to_excel() 时更改 header=True。

修改后的代码是:

import pandas as pd
import os
import tkinter as tk
from tkinter import filedialog

root = tk.Tk()
root.withdraw()

in_path = filedialog.askdirectory()
listing = os.listdir(in_path)

files_xlsx = [f for f in listing if f[-4:] == 'xlsx']

df = pd.DataFrame()

for infile in listing:
    file_data = pd.read_excel(in_path + '/' + infile,
                              header=0,
                              encoding = "ANSI")
    df = df.append(file_data, sort=False)


out_path = in_path + ' Combined.xlsx'

writer = pd.ExcelWriter(out_path, engine='xlsxwriter')

df.to_excel(writer,
            sheet_name='Combined',
            index=False,
            header=True)

writer.save()

并给我一个带有一些测试数据的输出

桌子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM