繁体   English   中英

如何通过pandas将多个工作表中的列合并到一个excel文件中

[英]How to merge columns from multiple sheets in one excel file by pandas

如何使用熊猫组合每张纸中的列?

我需要遍历一个 Excel 文件中的每个工作表,并分别合并每个工作表,如下图所示。

我在一个文件中有大约 1000 张纸,并且床单名称不一样。

如何进行迭代和合并?

显示表 1

显示表 2

显示 sheet3

  • pandas.read_excelsheet_name=None一起使用似乎最容易。
    • 指定None以获取所有工作表。
    • 这将创建一个以sheet_names作为键的数据帧dict
    • 遍历keysvalues ,以组合两列并写回文件。
  • 根据您的评论, .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)

这在许多帖子中都有解释( 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 中的合并数据帧。

尝试分别读取 3 个 excel 表,如下所示,然后使用 pd.merge 按索引或任何其他列将 df1、df2、df3 合并为单个数据框,以匹配所有三个数据框的右列

            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)

更新:

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 列组合的新电子表格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM