pandas 重命名 Dataframe 的循环函数

xesrikrc  于 2023-02-17  发布在  其他
关注(0)|答案(3)|浏览(157)

我是一个新的编码,目前我想从每个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标签名为'阿尔法','测试'和'查理'。上面的代码将给我3个 Dataframe ,我可以调用它们键入:d['alpha']d['beta']d['charlie']。我想要的是重命名 Dataframe ,这样就不用通过键入(例如)d['alpha']来调用它们,我只需要写入alpha(没有任何其他额外内容)。
编辑:我要解析的Excel有50多个选项卡,并且可以增长编辑2:谢谢大家的链接和答案!这是一个很大的帮助

3okqufwl

3okqufwl1#

不要重命名它们。

我可以想到两种情况:

1.床单有根本的不同

当人们问如何动态地为变量名赋值时,通常(也是最好)的回答是“使用字典”。Here's one example.
事实上,这就是Pandas这样做的原因!
在这种情况下,我的意见是,你最好的举动是什么也不做,只是使用你的字典。

2.床单大致相同

如果这些工作表基本上都是相同的,并且只有一个属性不同(例如,它们表示每月销售额,工作表的名称是“May”、“June '等),那么最好的方法是使用merge them somehow,添加一列来反映工作表名称(在我的示例中是month)。

无论您做什么,都不要使用execeval,不管别人告诉您什么。初学者不适合使用它们。

5ktev3wc

5ktev3wc2#

我想你正在寻找内置的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)

但是,我再次强调,这不是最干净的方法。您的方法肯定是干净的,更准确地说,我总是使用dict来进行这类赋值。有关exec的更多信息,请参见here
通常,您希望生成一个字符串。

possible_string = 'a=10'
exec(possible_string)
print(a) # 10
idfiyjo8

idfiyjo83#

您需要创建与三个 Dataframe 对应的变量:

alpha, beta, charlie = d.values()

编辑:
既然您提到excel工作表可以有50多个选项卡,并且可以增长,那么您可能更愿意使用原来的循环。

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...

相关问题