尝试自学编码以自动完成一些繁琐的工作任务。我为任何无意的无知道歉。
我在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
答案 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()
返回包含当前范围的全局变量的字典。 (因此,如果在全局命名空间而不是本地命名空间中定义Data
和ByBrand
,请使用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的方式:将键映射到值。