【问题标题】:Pandas: Iterate through a list of DataFrames and export each to excel sheetsPandas:遍历 DataFrame 列表并将每个导出到 Excel 工作表
【发布时间】:2016-08-26 17:05:30
【问题描述】:

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

我在 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”,它只会使用来自 Data 的数据创建一个名为“i”的工作表,但不会迭代到 ByBrand。此外,如果工作表未命名为相应的数据框,则 excel 文件将是一场噩梦,因此请不要对编号表之类的内容提出建议。

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

-斯蒂芬

【问题讨论】:

    标签: excel python-3.x pandas xlsxwriter


    【解决方案1】:

    从字符串'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:

    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 的预期使用方式:将键映射到值。

    【讨论】:

      猜你喜欢
      • 2021-06-04
      • 2019-04-06
      • 2017-12-26
      • 2016-08-02
      • 2012-12-23
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多