我一直在关注Pandas: run length of NaN holes,特别是评论中的代码片段:
Series([len(list(g)) for k, g in groupby(a.isnull()) if k])
作为一个蟒蛇新手,我对简洁性印象深刻,但不确定如何阅读本文。是
这一点的缩写myList = []
for k, g in groupby(a.isnull()) :
if k:
myList.append(len(list(g)))
Series(myList)
为了理解发生了什么,我试图解决它,但得到一个错误:
list object is not callable
那里运气不多。
如果有人能对此有所了解,那将是可爱的。
谢谢, 安
答案 0 :(得分:5)
您的翻译正确无误。但是,您提供的代码无法运行,因为a
是一个自由变量。
我的猜测是你收到了错误,因为你已经为名称list
分配了一个列表对象。不要这样做,因为list
是列表类型的全局名称。
此外,将来请始终提供完整的堆栈跟踪,而不仅仅是其中的一部分。还请提供足够的代码至少没有自由变量。
答案 1 :(得分:1)
如果这是您的所有代码,那么您只有几个可能性:
myList.append
实际上是一个列表len
实际上是一个列表list
实际上是一个列表isnull
实际上是一个列表groupby
实际上是一个列表Series
实际上是一个列表groupby
后面。我要继续前进myList.append
(因为除非您出于某种原因使用自己的groupby
功能)和Series
,否则这是不可能的。除非您从某个奇怪的地方导入Series
,或者您正在重新分配变量,否则我们知道Series
不能是列表。可以对a.isnull
进行类似的论证。
因此,我们有两种真正的可能性。您已经在脚本中的某个位置重新分配了一个不应该的列表,或者错误在groupby
后面。
我认为你使用了错误的groupby
itertools.groupby
take和数组或列表作为参数,groupby
in pandas
可能会将第一个参数计算为函数。我特别认为这是因为isnull()
returns an array-like object。