2015-11-26 33 views
6

我有連鎖命令大熊貓的長字符串,例如:是否可以跨多行分割一系列熊貓命令?

df.groupby[['x','y']].apply(lambda x: (np.max(x['z'])-np.min(x['z']))).sort_values(ascending=False) 

而且我希望能夠展示它橫跨多行,但仍然作爲一個襯墊(不保存結果到一個臨時對象,或定義lambda作爲一個功能)

的我怎麼會喜歡看一個例子:

df.groupby[['x','y']] 
.apply(lambda x: (np.max(x['z'])-np.min(x['z']))) 
.sort_values(ascending=False) 

是否可以這樣做呢? (我知道'_'在python中有這個功能,但它似乎不能用於鏈接命令)

回答

7

在Python中,您可以通過以反斜線結束行或通過包含表達式來繼續下一行括號內。

df.groupby[['x','y']] \ 
.apply(lambda x: (np.max(x['z'])-np.min(x['z']))) \ 
.sort_values(ascending=False) 

(df.groupby[['x','y']] 
.apply(lambda x: (np.max(x['z'])-np.min(x['z']))) 
.sort_values(ascending=False)) 
+1

,雖然這是正確的語法,這是相當unpythonic,因爲它使代碼非常難以閱讀。 – cel

+0

我同意,我不喜歡這兩種選擇。 – GaryBishop

+0

我理解並同意,對於讀取代碼不是最好的選擇,但是當在幻燈片中顯示代碼時,我認爲這比將其分解爲更多行更清晰。你有其他想法嗎? – user2808117

1

纏繞長行的優選方式是通過使用括號內,括號和大括號Python的暗示 線延續。通過在 括號中包裝表達式,長行 可以分成多行。這些應優先用於使用反斜槓 爲續行

https://www.python.org/dev/peps/pep-0008/#id19

所以可以更好地:

df.groupby[['x', 'y']].apply(
    lambda x: (np.max(x['z'])-np.min(x['z'])) 
).sort_values(ascending=False) 

最後打印的表達變量「_」是已知的唯一的在Python控制檯,因此如果沒有明確的歸屬,則不能在腳本/模塊中用於此目的。

0

因爲這有一個命令的性質,我可能會對其進行格式化接近你的榜樣,像這樣:

df.groupby[['x','y']] \ 
    .apply(lambda x: np.max(x['z'])-np.min(x['z'])) \ 
    .sort_values(ascending=False) 

我花了很長的時間才能實現點之前,我可以打破這些表情,這通常比打破圓括號更可讀(同樣適用於「某些長字符串」.format())。

如果這更像是一種表達的評價,我會包裹在括號中的整個事情,這被認爲是更「Python化」比續行標誌:

var = (
    df.groupby[['x','y']] 
     .apply(
      lambda x: np.max(x['z'])-np.min(x['z']) 
     ) 
     .sort_values(ascending=False) 
)