Ste*_*hen 3 excel python-3.x pandas xlsxwriter
试图自学编码以自动化工作中的一些乏味任务。对于任何无意的无知,我深表歉意。
我在熊猫(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()
Run Code Online (Sandbox Code Playgroud)
很容易,但是当需要创建 50 多张纸时,它会变得乏味。
这是我尝试过的,没有用:
writer = pandas.ExcelWriter("MyData.xlsx", engine='xlsxwriter')
List = [Data , ByBrand]
for i in List:
i.to_excel(writer, sheet_name= i)
writer.save()
Run Code Online (Sandbox Code Playgroud)
我认为问题在于 sheet_name 字段必须是一个字符串,因为它会产生错误。但是,如果我放置 sheet_name="i",它只会使用来自 Data 的数据创建一个名为“i”的工作表,但不会迭代到 ByBrand。此外,如果工作表没有以相应的数据框命名,那么 excel 文件将是一场噩梦,因此请不要对编号工作表之类的东西提出建议。
非常感谢您,这个网站对我的编码之旅非常宝贵。
-斯蒂芬
从字符串'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()
Run Code Online (Sandbox Code Playgroud)
locals()返回一个只读字典,其中包含当前作用域的局部变量。
globals()返回一个包含当前作用域的全局变量的字典。(因此,如果Data和ByBrand是在全局命名空间而不是本地命名空间中定义的,则使用globals()代替locals()。)
另一种选择是在字典中收集数据帧。不是为每个 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()
Run Code Online (Sandbox Code Playgroud)
我认为这是更可取的,因为它不需要像locals()或 之类的内省工具globals()。第二种方法只是使用字典的方式来使用字典:将键映射到值。