从字符串调用Pandas Dataframe函数

时间:2017-09-13 13:55:30

标签: python pandas numpy

对于上下文,我正在尝试构建一个脚本,该脚本将输出有关我在内存中的DataFrame的信息。

我有一个DataFrame,其中列出了所有DataFrame(dflist)。我想得到Dataframe的名称来调用一个函数。例如df1.shape。我遇到了系统将df1视为字符串的问题。

dflist
|名称|
| df1 |
| df2 |

谢谢。

3 个答案:

答案 0 :(得分:3)

您可以使用locals(),它返回所有局部变量的字典,即

df1

相同
locals()['df1']

所以你可以做到

[locals()[x].shape for x in list_of_names]

答案 1 :(得分:0)

我假设您的意思是您有一个与内存中的数据帧对应的DataFrame名称列表。在任何情况下,eval函数都是您正在寻找的。

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