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

3

我想自学编程以便在工作中自动化一些繁琐的任务。如有任何无意的无知,敬请谅解。

我已经在 pandas(python 3.x)中创建了数据框。我希望将每个数据框打印到不同的excel表中。以下是我为两个数据框创建的代码,它们运行得很完美,但我希望能够循环遍历一个数据框列表,以使其更加动态。

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个回答

5

从字符串 '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()。)


另一种选择是将 DataFrame 收集到一个 dict 中。不要为每个 DataFrame 创建一个变量,而是创建一个 dict,让键成为工作表名称,值成为 DataFrame:

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()这样的内省工具。第二种方法只是按照字典的用法来使用字典:将键映射到值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接