2017-09-26 119 views
1

我有熊貓系列,我可以得到如下給出的平均值。字符串熊貓函數轉換

>>> 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的系列的平均/最大等值。我想在我的程序中避免很多其他情況。請幫忙 。

回答

1

如果你改變你的字典只是有點,你可以使用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

0

你也可以使用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'