呆鸟译PyPython中文社区呆鸟的Python数据分析

如何把多个 df 保存至一个 Excel?

2019-12-17  本文已影响0人  呆鸟的简书

Pandas 百问百答第 007 篇。

呆鸟云:“以前没注意这个问题,都是把单个 df 保存到单个 Excel 文件,前些日子有读者大大问到这个问题,先给出解决方案。大家可能知道怎么把多个 df 写入一个 Excel 文件的多个 sheet,但你们知道怎么把多个 df 分横向或纵向写入一个 Excel 文件的同一个 sheet 吗?不知道的话,就看文章吧。”

本篇解决两个问题:

  1. 把多个 df 分别写入到一个 Excel 文件的不同 sheet
  2. 把多个 df 写入一个 Excel 文件的同一个 sheet(分横向或纵向)

0. 创建三个 df

df1 = pd.DataFrame({
    'a':[1,2],
    'b':[3,4]
})

df2 = pd.DataFrame({
    'c':[5,6],
    'd':[7,8]
})

df3 = pd.DataFrame({
    'e': [9, 10],
    'f': [11, 12]
})

1. 把多个 df 分别写入到一个 Excel 文件的不同 sheet

with pd.ExcelWriter('data/output/multiple_dfs_to_one_excel.xlsx') as writer:
    df1.to_excel(writer, 'df1')
    df2.to_excel(writer, 'df2')
    df3.to_excel(writer, 'df3')

注:这里提示一下,文件名写成相对路径,好处是,移动或分享文件时,不用再改路径。子目录的写法很多,反斜杠是一种比较简单的方式。

就这么简单,三个 df 都写到一个 Excel 文件里了,sheet 名分别为 df1 、 df2、df3,想换别的表名,更改 `.to_excel() 的表明参数就可以了。

2. 把多个 df 写入一个 Excel 文件的同一个 sheet(分横向或纵向)

把多个 df 放到一个 sheet 里有点复杂,呆鸟给需要的朋友编了一个现成的函数,比较简单,但是能用。

def to_onesheet(file_name=None, sheet_name=None, df_list=None, direction='h', spaces=1):
    row = 0
    col = 0
    writer = pd.ExcelWriter(file_name, engine='xlsxwriter')

    for dataframe in df_list:
        dataframe.to_excel(excel_writer=writer, sheet_name=sheet_name,
                           startrow=row, startcol=col)
        if direction == 'h':
            col = col + len(dataframe.columns) + spaces + 1
        elif direction == 'v':
            row = row + len(dataframe.index) + spaces + 1
        else:
            raise ValueError(
                f"Direction must be 'h' or 'v', you entered is '{direction}'")
    return writer.save()

简单说明一下这个函数:
1.file_name,是输出文件名;

  1. sheet_name,是输出的表名;
  2. df_list,是 df 的列表;
  3. direction,是输出的方向,‘h’ 代表横向输出,‘v’ 代表纵向输出,输入其它参数,会提示错误,默认为横向;
  4. spaces,代表每个 df 之间的空格,默认为 1 个空格。

有了这个函数以后,直接调用就可以了:

# 横向输出
to_onesheet('data/output/to_onsheet_h.xlsx', '横向测试',
            df_list=dfs, direction='h', spaces=1)
# 或,纵向输出
to_onesheet('data/output/to_onsheet_v.xlsx', '纵向测试', dfs, 'v', 1)

输出效果比较简陋,如何优化,以后再说。

上一篇下一篇

猜你喜欢

热点阅读