2013-07-17 39 views
2

我一直在看Pandas: run length of NaN holes,並從特別的註釋的代碼段:Python的簡潔混淆了我

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 

所以沒有太多的運氣那裏。

如果有人能夠對此有所瞭解,那將是可愛的。

感謝, 安妮

+0

因此,第一個片段的作品,而第二個片段沒有? – arshajii

+1

你只需要瞭解Python的理解...列表解析,集合理解等 –

+0

'a'不是一個正常的列表,它是一個'熊貓。系列',而不是你的解釋是正確的 –

回答

5

你已經得到了正確的翻譯。但是,您提供的代碼無法運行,因爲a是一個自由變量。

我的猜測是,你得到的錯誤,因爲你已經爲名稱list分配一個列表對象。不要這樣做,因爲list是列表類型的全局名稱。

此外,在未來,請始終提供一個完整的堆棧跟蹤,而不只是其中的一部分。還請提供足夠的代碼,至少至少沒有自由變量。

+0

@arshajii你怎麼看?嘗試'[]()'。 – Marcin

+0

哦,沒關係,我誤解了,是的+1 – arshajii

+0

道歉Marcin,我不想從原來的問題重新發布代碼,這就是爲什麼我只刪除了讓我頭痛的片段。你可以看到http://stackoverflow.com/a/16857854/2565842整個代碼,它只是幾行... – Anne

1

如果這是所有的代碼,那麼你只有幾種可能性:

  1. myList.append確實是一個列表
  2. len確實是一個列表
  3. list確實是一個列表
  4. isnull真是名單
  5. groupby真的是名單
  6. Series確實是一個列表
  7. 該錯誤存在於groupby後面某處。

我要繼續前進,重拳出擊myList.append(因爲那是不可能的,除非你正在使用某種原因,你自己groupby功能)和Series。除非您從奇怪的地方導入Series,或者您正在重新分配變量,否則我們知道Series不能是列表。可以對a.isnull進行類似的說法。

因此,這給我們留下了兩個真正的可能性。要麼你已經在你的腳本的某個地方重新分配了一個它不應該是的列表,或者錯誤在groupby之後。

我認爲你使用了錯誤的groupbyitertools.groupby以數組或列表作爲參數,groupby in pandas可能會將第一個參數作爲函數計算。我特別認爲這是因爲isnull() returns an array-like object