【问题标题】:How to write Python dataframe to multiple sheets of multiple Excel files如何将 Python 数据框写入多张 Excel 文件
【发布时间】:2019-08-06 05:27:08
【问题描述】:

我有一个 Python 数据框,我想将它写入两个 Excel 文件,每个文件都有三张纸。有五列,前两列在所有三张纸上,最后三列在三张纸上旋转。 Excel 文件基于第一列的值。因此,每个文件将具有相同的三张纸(当然,具有不同的值)。

我有代码可以将不同的列放在一个 Excel 文件的不同工作表上。而且我有代码可以根据列值创建多个 Excel 文件。我想不出将这两种技术结合起来创建多个 Excel 文件的方法,每个 Excel 文件都有多个工作表。

示例数据框:

df = pd.DataFrame({'School': ['School1', 'School1', 'School2', 'School2'], 
                   'Sex': ['M', 'M', 'F', 'F'],
                   'Q1' : ['Black', 'Black', 'White', 'White'],
                   'Q2' : ['Good', 'Good', 'Bad', 'Bad'],
                   'Q3' : ['Up', 'Up', 'Down', 'Down']})

此代码将根据 School 列创建不同的 Excel 文件:

output = df[['School','Sex','Q1']].groupby('School')
output.apply(lambda x: x.to_excel('School' + str(x.name) + '.xlsx'))

此代码将在一个 Excel 文件的不同工作表上放置不同的列:

writer = pd.ExcelWriter('school_tabs.xlsx', engine='xlsxwriter')
df[['School','Sex','Q1']].to_excel(writer, sheet_name='Q1')
df[['School','Sex','Q2']].to_excel(writer, sheet_name='Q2')
df[['School','Sex','Q3']].to_excel(writer, sheet_name='Q3')
writer.save()

期望的输出是:

Excel 文件 1

(sheet 1):
School    Sex  Q1
School 1  M    Black
School 1  M    Black

(sheet 2):
School    Sex  Q2
School 1  M    Good
School 1  M    Good

(sheet 3):
School    Sex  Q3
School 1  M    Up
School 1  M    Up

Excel文件2

(sheet 1):
School    Sex  Q1
School 2  F    White
School 2  F    White

(sheet 2):
School    Sex  Q2
School 2  F    Bad
School 2  F    Bad

(sheet 3):
School    Sex  Q3
School 2  F    Down
School 2  F    Down

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    IIUC,只需遍历您的 groupby 对象。这将允许您分别处理每个数据帧。

    使用您自己的代码行:

    output = df[['School','Sex','Q1']].groupby('School')
    
    for school, df_ in output:
        writer = pd.ExcelWriter(f'school_{school}_tabs.xlsx', engine='xlsxwriter')
        df_[['School','Sex','Q1']].to_excel(writer, sheet_name='Q1')
        df_[['School','Sex','Q2']].to_excel(writer, sheet_name='Q2')
        df_[['School','Sex','Q3']].to_excel(writer, sheet_name='Q3')
        writer.save()
    

    【讨论】:

    • 输出行应该是: output = df[['School','Sex','Q1','Q2','Q3']].groupby('School') 否则,它完美地工作。谢谢!
    猜你喜欢
    • 2019-03-23
    • 2019-05-10
    • 2015-01-15
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2011-03-09
    • 2019-06-04
    相关资源
    最近更新 更多