我有以下格式的多个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
如果文件中的单元格为空,而另一个文件中有值,我想替换它。
有没有简单的方法来实现这个目标?
感谢。
答案 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)