pandas groupby agg function column / dtype error

时间:2014-02-11 15:28:37

标签: python pandas aggregate

我正在使用Python进行数据分析,而且我遇到了部分问题。 9(数据聚合和组操作)部分关于“使用函数分组”。

具体来说,如果我使用GroupBy对象方法或者例如Numpy定义的函数,一切正常。特别是,它忽略带有字符串的列,并且只对(适当的)数字列进行操作。但是,如果我尝试定义自己的函数来计算某些数字输出,它不会忽略带有字符串的列,并返回属性错误。

以下是我遇到问题的例子:

df = DataFrame({'data1':np.random.randn(5),
                'data2':np.random.randn(5),
                'key1':['a','a','b','b','a'],
                'key2':['one','two','one','two','one']})

如果我键入其中任何一个(我将numpy作为np导入),它可以正常工作:

df.groupby('key1').mean()

grouped = df.groupby('key1')

grouped.agg(np.mean())

但如果我尝试这些,我会收到错误('peak_to_peak'来自书中):

def peak_to_peak(arr):
    return arr.max() - arr.min()

grouped.agg(peak_to_peak)

grouped.agg(lambda x: np.mean(x))

尝试'peak_to_peak'会给我一个很长的错误,以下结尾:

TypeError: unsupported operand type(s) for -: 'str' and 'str'

使用np.mean()尝试lambda函数会给我一个很长的错误,结尾于:

TypeError: Could not convert onetwoone to numeric

尝试其他用户定义的函数会产生类似的错误。在所有这些情况下,很明显尝试将peak_to_peak()或np.mean()(或其他)应用于df的'key2'列的(子集),而对于内置方法和预定义函数,它(正确地)忽略'key2'列子集。

任何见解都将不胜感激。

更新:事实证明,如果我将'peak_to_peak'或lambda函数作为列表传递(例如,grouped.agg([peak_to_peak])),它就可以正常工作。请注意,这不是本书中的方式,也不是预定义函数所需的列表。所以,它仍然令人困惑,但我认为至少它是有用的。

0 个答案:

没有答案