字符串熊猫函数转换

问题描述:

我有熊猫系列,我可以得到如下给出的平均值。字符串熊猫函数转换

>>> s = pd.Series(np.random.randn(5)) 
    >>> s 
    0 -0.426981 
    1 1.322446 
    2 -1.505474 
    3 0.411286 
    4 0.431440 
    dtype: float64 
    >>> s.mean() 
    0.046543382190213201 
    >>> s.max() 
    1.3224457683044697 

但我必须选择下面的代码中给出的基于操作/函数的键。

>>> pfync = {'average': 'mean()', 'maximin': 'max()', 'minimum': 'min()', 'Standard deviation': 'std()'} 
    >>> opType=pfync['average'] 
    >>> opType 
    'mean()' 
    >>> 

我怎样才能得到基于变量opType的系列的平均/最大等值。我想在我的程序中避免很多其他情况。请帮忙 。

如果你改变你的字典只是有点,你可以使用pd.Series.agg

pfync = { 
    'average': 'mean', 
    'maximin': 'max', 
    'minimum': 'min', 
    'Standard deviation': 'std' 
} 

s.agg(pfync['average']) 

0.046543382190213201 

如果你不能改变你字典,只需要剥离括号。

s.agg(pfync['average'].strip('()')) 

0.046543382190213201 

对于之前0.20旧版本的熊猫,你可以使用__getattr__

s.__getattr__(pfync['average'])() 
+0

更改字典后。我得到这个错误AttributeError:'系列'对象没有'agg'属性。 pd version = 0.19.2 –

+0

我已更新我的帖子。让我知道这是否有效。 – piRSquared

你也可以使用eval来获得你正在寻找的值。不确定用例是什么,所以我打印出这些值。

import numpy as np 
import pandas as pd 

pfync = { 
    'average': 'mean()', 
    'maximin': 'max()', 
    'minimum': 'min()', 
    'Standard deviation': 'std()' 
} 

s = pd.Series(np.random.randn(5)) 

for k, v in pfync.iteritems(): 
    print v 
    print eval('s.'+v), '\n'