从字符串调用熊猫数据帧函数



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

我有一个列出的所有数据帧的数据帧 (dflist)。我想获取数据帧的名称以调用函数。例如 df1.shape。我遇到了系统将 df1 视为字符串的问题。

东风
|姓名|
|DF1 |
|DF2 |

谢谢。

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

df1

locals()['df1']

所以你可以做

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

我假设你的意思是你有一个与内存中的数据帧相对应的数据帧名称列表。无论如何,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]

由于使用eval 是一个坏主意(为什么使用 'eval' 是一个不好的做法?),我建议你使用字典:

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

最新更新