合并来自多个excel的一张纸的数据

时间:2018-04-02 09:11:17

标签: python excel pandas merge

我有以下格式的多个excel文件:

ID | Name | Prop1 | Prop2 | User

来自excel1的数据:

ID | Name | Prop1 | Prop2 | Prop3 | User 
1  | test |       |       |       | John

来自Excel2的数据:

ID | Name | Prop1 | Prop2 | Prop3 | User
1  | test |   a   |   b   |       | John

来自Excel3的数据:

ID | Name | Prop1 | Prop2 | Prop3 | User
1  | test |       |       |   c   | John

我想要做的是组合这些细胞。

期望的输出:

ID | Name | Prop1 | Prop2 | Prop3 | User
1  | test |   a   |   b   |   c   | John

如果文件中的单元格为空,而另一个文件中有值,我想替换它。

有没有简单的方法来实现这个目标?

感谢。

3 个答案:

答案 0 :(得分:4)

您可以按glob创建所有数据框的列表,最终df需要combine_first reduce

import glob
from functools import reduce

files = glob.glob('files/*.xlsx')
dfs = [pd.read_excel(fp).set_index(['ID','Name','User']) for fp in files]

df1 = reduce(lambda l,r: pd.DataFrame.combine_first(l,r), dfs)
print (df1)
             Prop1 Prop2 Prop3
ID Name User                  
1  test John     a     b     c

编辑:如果不需要将文件与NaN组合在一起,则解决方案更简单:

import glob

files = glob.glob('files/*.xlsx')
df = pd.concat([pd.read_excel(fp) for fp in files],ignore_index=True)

答案 1 :(得分:1)

尝试以下:

df1 = pd.read_excel('Excel1.xlsx', sheetname='Sheet1');
df2= pd.read_excel('Excel2.xlsx', sheetname='Sheet1');
df3 = pd.read_excel('Excel3.xlsx', sheetname='Sheet1')
mylist = [df1,df2,d3]
df = pd.merge(df1, df2, on=['ID','USER'])
df = pd.merge(df, df3, on=['ID','USER'])
writer = pd.ExcelWriter('pandas_simple.xlsx', engine='xlsxwriter')
# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1')
# Close the Pandas Excel writer and output the Excel file.
writer.save()

我还没有机会对此进行测试,但它应该有效。

答案 2 :(得分:0)

这应该做你想要的。

import pandas as pd
import numpy as np

        import glob
        glob.glob("C:/your_path_here/*.xlsx")

        all_data = pd.DataFrame()
        for f in glob.glob("C:/your_path_here/*.xlsx"):
            df = pd.read_excel(f)
            all_data = all_data.append(df,ignore_index=True)
            print(all_data)