我是新的编码,目前我想从每个excel选项卡创建单独的数据框架。到目前为止,通过在这个论坛上进行搜索(我发现了一个使用字典的示例),但然后我需要一个我无法计算的步骤。
这是我使用的代码:
import pandas as pd
excel = 'sample.xlsx'
xls = pd.ExcelFile(excel)
d = {}
for sheet in xls.sheet_names:
print(sheet)
d[f'{sheet}'] = pd.read_excel(xls, sheet_name=sheet)
假设我有3个excel选项卡,分别是'alpha', 'beta'和'charlie'。上面的代码将给我3个数据帧,我可以通过输入:d['alpha']
,d['beta']
和d['charlie']
来调用它们。我想要的是重命名数据框,而不是通过输入(例如)d['alpha']
来调用它们,我只需要写alpha
(没有任何其他额外的)。
编辑:我想要解析的excel有50+制表符,它可以增长编辑2:感谢大家的链接和回答!这是一个很大的帮助
您需要创建对应于三个数据框的变量:
alpha, beta, charlie = d.values()
编辑:
既然你提到excel工作表可以有50多个制表符并且可以增长,你可能更喜欢做你原来的循环。这可以使用exec
import pandas as pd
excel = 'sample.xlsx'
xls = pd.ExcelFile(excel)
d = {}
for sheet in xls.sheet_names:
print(sheet)
exec(f'{sheet}' + " = pd.read_excel(xls, sheet_name=sheet)")
但是,简单地索引您的表并通过索引访问它们可能是更好的实践。一个超过50个长度的excel表格的集合可能通过添加到列表并通过索引访问来更好地组织:
d = []
for sheet in xls.sheet_names:
print(sheet)
d.append(pd.read_excel(xls, sheet_name=sheet))
#d[0] = alpha; d[1] = beta, and so on...
不要重命名它们。
我能想到两种情况:
1。这两张表根本不同
当人们问如何动态分配变量名时,通常(也是最好的)答案是"使用字典"。这里有一个例子。
确实,这就是熊猫这样做的原因!
在这种情况下,我的意见是你最好什么都不做,就用你现有的字典。
2。床单大致相同
如果工作表基本相同,只有一个属性不同(例如,它们表示月销售额,工作表的名称是'May', 'June'等),那么你最好的做法是以某种方式合并它们,添加一个列来反映工作表名称(在我的例子中是month)。
无论你做什么,不要使用exec
或eval
,不管别人告诉你什么。它们不是初学者的选择。
我认为你正在寻找内置的exec
方法,它执行字符串。但是我不推荐使用exec
,它为什么不应该使用或者至少应该谨慎使用已经被广泛讨论过了。
由于我没有您的数据,我认为可以使用以下代码实现:
import pandas as pd
excel='sample.xlsx'
xls=pd.ExcelFile(excel)
for sheet in xls.sheet_names:
print(sheet)
code_to_execute = f'{sheet} = pd.read_excel(xls,sheet_name={sheet})'
exec(code_to_execute)
但是,我再次强调,这不是最干净的方法。你的方法显然更清晰,更准确地说,我总是用字典来做这类作业。关于exec
的更多信息,请参阅此处。
一般情况下,您希望生成一个字符串。
possible_string = 'a=10'
exec(possible_string)
print(a) # 10