Pandas:遍历 DataFrame 列表并将每个导出到 excel 工作表

Pandas: Iterate through a list of DataFrames and export each to excel sheets

尝试自学编码以自动执行工作中的一些繁琐任务。对于任何无意的无知,我深表歉意。

我在 pandas (python 3.x) 中创建了数据框。我想将每个数据框打印到不同的 excel sheet。这是我拥有的 2 个数据框,它工作得很好,但我想缩放它以循环遍历数据框列表,这样我就可以让它更动态一些。

writer = pandas.ExcelWriter("MyData.xlsx", engine='xlsxwriter')
Data.to_excel(writer, sheet_name="Data")
ByBrand.to_excel(writer, sheet_name="ByBrand")
writer.save()

很简单,但是当需要创建 50 多个 sheet 时,它会变得乏味。

这是我试过的方法,但没有用:

writer = pandas.ExcelWriter("MyData.xlsx", engine='xlsxwriter')
List = [Data , ByBrand]
for i in List:
        i.to_excel(writer, sheet_name= i)
writer.save()

我认为问题在于 sheet_name 字段必须是一个字符串,因为它会产生错误。但是,如果我输入 sheet_name= "i",它只会使用 Data 中的数据创建一个名为 "i" 的 sheet,但不会迭代到 ByBrand。此外,如果 sheet 未命名为相应的数据框,excel 文件将是一场噩梦,因此请不要对编号 sheet 之类的内容提出建议。

提前非常感谢,这个网站对我的编码之旅非常宝贵。

-斯蒂芬

从字符串 'Data' 到值 Data 比反过来更容易。您可以使用 locals()['Data'] 访问与字符串名称为 'Data':

的变量关联的值
import pandas as pd

writer = pd.ExcelWriter("MyData.xlsx", engine='xlsxwriter')
seq = ['Data', 'ByBrand']
for name in seq:
    df = locals()[name]
    df.to_excel(writer, sheet_name=name)
writer.save()

locals() returns 包含当前作用域局部变量的只读字典。 globals() returns 包含当前范围的全局变量的字典。 (因此,如果 DataByBrand 是在全局命名空间而不是局部命名空间中定义的,请使用 globals() 而不是 locals()。)


另一种选择是在字典中收集数据帧。不要为每个 DataFrame 创建一个变量,而是创建一个字典,并让键为 sheet 名称,值为 DataFrames:

import pandas as pd

dfs = dict()
dfs['Data'] = ...
dfs['ByBrand'] = ...

writer = pd.ExcelWriter("MyData.xlsx", engine='xlsxwriter')
for name, df in dfs.items():
    df.to_excel(writer, sheet_name=name)
writer.save()

我认为这是可取的,因为它不需要像 locals()globals() 这样的内省工具。第二种方法只是按照预期使用字典的方式使用字典:将键映射到值。