文件夹中有多个Excel文件。它们的结构相同,内容不同。我想将它们组合成一个Excel文件,按照这个序列读取55.xlsx,44.xlsx,33.xlsx,22.xlsx,11.xlsx。
这些方面做得很好:
import os
import pandas as pd
working_folder = "C:\\temp\\"
files = os.listdir(working_folder)
files_xls = []
for f in files:
if f.endswith(".xlsx"):
fff = working_folder + f
files_xls.append(fff)
df = pd.DataFrame()
for f in reversed(files_xls):
data = pd.read_excel(f) #, sheet_name = "")
df = df.append(data)
df.to_excel(working_folder + 'Combined 1.xlsx', index=False)
图片显示了原始纸张的样子,也是结果。
但是在顺序读取中,除了数据框中的内容之外,我只想要追加唯一的行。
在这种情况下:
代码首先读取文件55.xlsx,然后读取44.xlsx,然后读取33.xlsx ...
当它读取44.xlsx时,不应附加行444 Kate,因为已存在来自先前数据帧的Kate。
当它读取33.xlsx时,不应附加行333 Kate,因为前一个数据帧中已存在Kate。
当它读取22.xlsx时,不应追加行222 Jack,因为之前的数据帧中已有Jack。
顺便说一下,为了您的方便,这里是数据框(而不是Excel文件)。
d5 = {'Code': [555, 555], 'Name': ["Jack", "Kate"]}
d4 = {'Code': [444, 444], 'Name': ["David", "Kate"]}
d3 = {'Code': [333, 333], 'Name': ["Paul", "Kate"]}
d2 = {'Code': [222, 222], 'Name': ["Jordan", "Jack"]}
d1 = {'Code': [111, 111], 'Name': ["Leslie", "River"]}
答案 0 :(得分:2)
df.drop_duplicates(subset=['name'], keep='first')
答案 1 :(得分:1)
我认为需要drop_duplicates
:
import glob
working_folder = "C:\\temp\\"
files = glob.glob(working_folder + '/*.xlsx')
dfs = [pd.read_excel(fp) for fp in files]
df = pd.concat(dfs)
df = df.drop_duplicates('Name')
df.to_excel(working_folder + 'Combined 1.xlsx', index=False)
解决方案包含数据和inverse sorting files:
import glob
working_folder = "C:\\temp\\"
files = glob.glob(working_folder + '/*.xlsx')
print (files)
['C:\\temp\\11.xlsx', 'C:\\temp\\22.xlsx', 'C:\\temp\\33.xlsx',
'C:\\temp\\44.xlsx', 'C:\\temp\\55.xlsx']
files = sorted(files, key=lambda x: int(x.split('\\')[-1][:-5]), reverse=True)
print (files)
['C:\\temp\\55.xlsx', 'C:\\temp\\44.xlsx', 'C:\\temp\\33.xlsx',
'C:\\temp\\22.xlsx', 'C:\\temp\\11.xlsx']
dfs = [pd.read_excel(fp) for fp in files]
df = pd.concat(dfs)
print (df)
Code Name
0 555 Jack
1 555 Kate
0 444 David
1 444 Kate
0 333 Paul
1 333 Kate
0 222 Jordan
1 222 Jack
0 111 Leslie
1 111 River
df = df.drop_duplicates('Name')
print (df)
Code Name
0 555 Jack
1 555 Kate
0 444 David
0 333 Paul
0 222 Jordan
0 111 Leslie
1 111 River
df.to_excel(working_folder + 'Combined 1.xlsx', index=False)