使用Python将数据帧中的选择性行组合成1

时间:2018-03-15 06:19:28

标签: python dataframe

文件夹中有多个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)

图片显示了原始纸张的样子,也是结果。

enter image description here

但是在顺序读取中,除了数据框中的内容之外,我只想要追加唯一的行。

在这种情况下:

  1. 代码首先读取文件55.xlsx,然后读取44.xlsx,然后读取33.xlsx ...

  2. 当它读取44.xlsx时,不应附加行444 Kate,因为已存在来自先前数据帧的Kate。

  3. 当它读取33.xlsx时,不应附加行333 Kate,因为前一个数据帧中已存在Kate。

  4. 当它读取22.xlsx时,不应追加行222 Jack,因为之前的数据帧中已有Jack。

  5. 顺便说一下,为了您的方便,这里是数据框(而不是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"]}
    

2 个答案:

答案 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)