对于上下文,我正在尝试构建一个脚本,该脚本将输出有关我在内存中的DataFrame的信息。
我有一个DataFrame,其中列出了所有DataFrame(dflist)。我想得到Dataframe的名称来调用一个函数。例如df1.shape。我遇到了系统将df1视为字符串的问题。
dflist
|名称|
| df1 |
| df2 |
谢谢。
答案 0 :(得分:3)
您可以使用locals()
,它返回所有局部变量的字典,即
df1
与
相同locals()['df1']
所以你可以做到
[locals()[x].shape for x in list_of_names]
答案 1 :(得分:0)
我假设您的意思是您有一个与内存中的数据帧对应的DataFrame名称列表。在任何情况下,eval函数都是您正在寻找的。 p>
import pandas as pd
df1 = pd.DataFrame([0, 1])
df2 = pd.DataFrame([2, 3])
df3 = pd.DataFrame([4, 5])
list_of_names = ['df1', 'df2', 'df3']
[print(eval(x).shape) for x in list_of_names]
答案 2 :(得分:0)
由于使用eval是一个坏主意(Why is using 'eval' a bad practice?),我建议您使用字典:
import pandas as pd
d = {}
d['df1'] = pd.DataFrame([0, 1])
d['df2'] = pd.DataFrame([2, 3])
d['df3'] = pd.DataFrame([4, 5])
然后,您将能够遍历数据帧以计算形状或应用任何函数,如下所示:
In [7]: d.keys()
Out[7]: ['df1', 'df3', 'df2']
In [8]: [d[x].shape for x in d.keys()]
Out[8]: [(2, 1), (2, 1), (2, 1)]
额外的好处是,您可以轻松访问任何数据帧d [' df1'],无需额外内存或速度损失:
In [10]: timeit d['df1']
10000000 loops, best of 3: 29.2 ns per loop