【发布时间】:2020-12-25 11:08:24
【问题描述】:
如何使用 pandas 组合每个工作表中的列?
我需要遍历一个 Excel 文件中的每个工作表,并分别合并每个工作表,如下图所示。
我在一个文件中有大约 1000 张工作表,工作表名称不一样。
如何进行迭代合并?
【问题讨论】:
如何使用 pandas 组合每个工作表中的列?
我需要遍历一个 Excel 文件中的每个工作表,并分别合并每个工作表,如下图所示。
我在一个文件中有大约 1000 张工作表,工作表名称不一样。
如何进行迭代合并?
【问题讨论】:
pandas.read_excel 和sheet_name=None。
None 以获取所有工作表。dict 的数据帧,其中 sheet_names 作为键。keys 和values,将两列合并并写回文件。.fillna() 方法可用于任一列,如以下代码所示。import pandas as pd
# create dict of dataframes
df = pd.read_excel('test.xlsx', sheet_name=None)
# iterate through dict
for k, v in df.items():
with pd.ExcelWriter('combined.xlsx', mode='a', engine='openpyxl') as writer: # write sheets to a new file
combined = v.iloc[:, 0].fillna('xxx') + ' ' + v.iloc[:, 1].fillna('xxx') # combine the first and second column
combined.to_excel(writer, sheet_name=k, index=False, header=False)
df = pd.read_excel('test.xlsx', sheet_name=None)
for k, v in df.items():
with pd.ExcelWriter('combined.xlsx', mode='a', engine='openpyxl') as writer: # write sheets to a new file
v['comb'] = v.iloc[:, 0].fillna('xxx') + ' ' + v.iloc[:, 1].fillna('xxx') # combine the first and second column
v.to_excel(writer, sheet_name=k, index=False, header=False)
【讨论】:
更新:
import pandas as pd
writer = pd.ExcelFile('Downloads\wbook.xlsx')
writer.sheet_names
#prints names of the spreadsheets.
excelfile = pd.ExcelWriter('workb1.xlsx', engine='openpyxl')
for i in writer.sheet_names:
df = pd.read_excel(writer, sheet_name=i, header=None)
df[3] = df.iloc[:, 0] + ' ' + df.iloc[:, 1]
df.to_excel(excelfile, sheet_name=i, index=False)
excelfile.save()
创建一个新的电子表格,其中包含原始工作簿中每个工作表的 A 列和 B 列的组合。
【讨论】:
这在很多帖子中都有解释(Using Pandas to pd.read_excel() for multiple worksheets of the same workbook)
xls = pd.ExcelFile('path_to_file.xls')
df1 = pd.read_excel(xls, 'Sheet1')
df2 = pd.read_excel(xls, 'Sheet2')
按列合并数据框,
df1.append(df2)
df1.append(df3)
...
以上代码将生成一个合并的数据框,保存在 df1 中。
【讨论】:
import pandas as pd
df1 = pd.read_excel(f_name.xls, 'Sheet1')
df2 = pd.read_excel(f_name.xls, 'Sheet2')
df3 = pd.read_excel(f_name.xls, 'Sheet3')
df = pd.merge(df1, (pd.merge(df2, df3, how='outer', left_index=True, right_index=True), how='outer', left_index=True, right_index=True)
【讨论】: