2

我一直在看Pandas: run length of NaNholes,特别是评论中的这段代码片段:

Series([len(list(g)) for k, g in groupby(a.isnull()) if k]) 

作为一个 python 新手,我对它的简洁印象深刻,但不知道如何阅读。它是类似于以下内容的缩写吗

myList = []
for k, g in groupby(a.isnull()) :
    if k:
        myList.append(len(list(g)))
Series(myList)

为了了解发生了什么,我试图玩弄它但得到一个错误:

list object is not callable

所以那里没有太多的运气。

如果有人能对此有所了解,那就太好了。

谢谢,安妮

4

2 回答 2

5

你的翻译是正确的。但是,您提供的代码无法运行,因为a它是一个自由变量。

我的猜测是您收到错误是因为您已将列表对象分配给 name list。不要那样做,因为list它是列表类型的全局名称。

此外,将来请始终提供完整的堆栈跟踪,而不仅仅是其中的一部分。还请提供足够的代码,至少没有自由变量。

于 2013-07-17T18:06:14.317 回答
1

如果这是您的所有代码,那么您只有几种可能性:

  1. myList.append真的是一个清单
  2. len真的是一个清单
  3. list真的是一个清单
  4. isnull真的是一个清单
  5. groupby真的是一个清单
  6. Series真的是一个清单
  7. 错误存在于后面的某个地方groupby

我将继续前进(因为这是不可能的,除非您出于某种原因myList.append使用自己的功能)和. 除非您从某个奇怪的地方导入,或者您正在重新分配变量,否则我们知道不能是列表。可以对 进行类似的论证。groupbySeriesSeriesSeriesa.isnull

所以这给我们留下了两种真正的可能性。要么你在脚本中的某个地方重新分配了一些不应该出现的列表,要么错误出现在groupby.

我认为您使用错误groupby itertools.groupby的 take 和数组或列表作为参数,groupby可能pandas会将第一个参数评估为函数。我特别认为这是因为isnull()返回了一个类似数组的对象

于 2013-07-17T18:10:55.037 回答