Pandas - 数据帧名称列表?

3

我已经进行了大量的搜索,但没有找到相关的信息。是否有内置函数可以自动生成我创建的Pandas数据帧列表?

例如,我创建了三个数据帧:df1 df2 df3

现在我想要一个像这样的列表:df_list = [df1, df2, df3],这样我就可以遍历它。


为什么不使用字符串标记,直接使用 df_list = [df1, df2, df3] - JohanL
你说得对,那就是我想表达的意思,我已经更新了问题。 - Walt Reed
1
Pandas不会为您跟踪创建的数据框。也许有一些hacky的方法可以获取它们,但通常情况下,您应该只需创建一个列表,并在每次创建要“保留”的数据框时将其添加到其中。 - Johannes
那就是我想的了,因为我在这个主题上找不到任何相关的内容。 - Walt Reed
2个回答

6

我获取它们的方法 (-:

Python提供了一个内置的globals,返回一个字典,其中键是命名变量,值是对象本身。我们可以使用列表推导式并迭代字典的所有值,只获取那些类型为pd.DataFrame的值。

d = globals()
df_list = [v for k, v in d.items() if isinstance(v, pd.DataFrame)]

跟进问题:返回的列表中,df名称带有引号。有没有办法返回一个没有名称周围引号的列表?当前输出:['df1','df2','df3'] 首选:[df1,df2,df3] - Walt Reed
如果你使用了我的代码,你就不应该有任何名称。你应该将实际的对象作为列表元素。 - piRSquared
你说得对。重新阅读我的问题后,我表述不够清晰。我的目标是返回一个数据框名称列表,然后可以用它来进行迭代。 - Walt Reed
1
如果你这样做,你会得到像['df1']这样的东西。这就是你想要的。然后你将不得不使用eval(df_list[0])来访问它。最好将其保留为字典df_dict = {k: v for k, v in d.items() if isinstance(v, pd.DataFrame)}。然后你可以有名称和数据帧对象。 - piRSquared
1
@WaltReed 实际上,你可以创建列表和字典,同时拥有最好的两个世界。df_dict[df_list[0]] - piRSquared

1

%who_ls DataFrame

这是以列表形式加载在内存中的所有数据框

all_df_in_mem = %who_ls DataFrame


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接