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

时间:2016-05-02 01:29:49

标签: excel python-3.x pandas xlsxwriter

尝试自学编码以自动完成一些繁琐的工作任务。我为任何无意的无知道歉。

我在pandas(python 3.x)中创建了数据框。我想将每个数据框打印到不同的Excel工作表。这就是我对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张以上的纸张时,这将变得乏味。

这是我尝试的,它不起作用:

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",它只会创建一张名为" i"使用来自Data的数据,但不会迭代到ByBrand。此外,如果工作表没有被命名为相应的数据框,那么excel文件将是一场噩梦,所以请不要提供有关编号工作表等内容的建议。

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

-Stephen

1 个答案:

答案 0 :(得分:2)

从字符串'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()返回包含当前范围的局部变量的只读字典。 globals()返回包含当前范围的全局变量的字典。 (因此,如果在全局命名空间而不是本地命名空间中定义DataByBrand,请使用globals()而不是locals()。)

另一种选择是在dict中收集DataFrame。不要为每个DataFrame创建变量,而是创建一个dict,让键成为工作表名称,值为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()这样的内省工具。第二种方法只是使用一个dict,意思是使用dicts的方式:将键映射到值。