我必须组合几个文件(大约40个),这些文件有几种不同的标题(例如,标题根据文件在不同的列中,一些文件有一些列的名称在其他文件中没有显示,等等)。
我有一个python脚本,它可以组合这些文件,但它只是将它们放在原始文件中的相同顺序中。我希望这个脚本能够在新的列名出现时添加一个新列,并将该列名的所有将来出现的内容映射到相应的行。
下面是我想要的输出的一个示例,其中“毛佣金”和“支出”列仅显示在2019年7月的文件中,而“%”和“$”列仅显示在2018年6月的文件中(所有其他列都显示在这两个列中):
*每个文件都有一个不同的“期间”。
当前代码:
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()
谢谢你的帮助,如果我能提供更多细节,请告诉我。
发布于 2020-10-31 20:24:44
要将头文件写入到您的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()
并给出了带有一些测试数据的如下输出
https://stackoverflow.com/questions/64625521
复制相似问题