2015-11-26 9 views
6

mam długi ciąg pand przykuty polecenia, na przykład:Czy można podzielić sekwencję poleceń pandy na wiele linii?

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

I chciałbym, aby móc przedstawić go na wielu liniach, ale nadal jako jeden liniowej (bez zapisywania wyników do tymczasowego obiektu, lub definiując lambda jako funkcja)

przykład, jak chciałbym go szukać:

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

Czy to możliwe, aby to zrobić? (Wiem, że "_" ma tę funkcję w pythonie, ale nie działa z połączonymi poleceniami)

Odpowiedz

7

W pytonie możesz przejść do następnej linii, kończąc linię zwrotnym ukośnikiem lub zamykając wyrażenie w nawiasie.

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

lub

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

podczas składnia jest poprawna, to raczej niepythoniczny, ponieważ sprawia, że ​​kod jest bardzo trudny do odczytania. – cel

+0

Zgadzam się, nie podoba mi się żadna z tych opcji. – GaryBishop

+0

Rozumiem i zgadzam się, że dla czytania kodu nie jest to najlepsza opcja, jednak przy przedstawianiu kodu na slajdzie myślę, że byłoby to wyraźniejsze niż rozbicie go na dodatkowe linie. Czy myślisz inaczej? – user2808117

1

Korzystnym sposobem pakowania długich linii jest Pythonie wynikało kontynuacji linii wewnątrz okrągłe, kwadratowe i stężeń. Długie linie mogą być przerywane na wiele linii poprzez zawijanie wyrażeń w nawiasach. Powinny one być stosowane zamiast do korzystania z backslash dla linii kontynuacji

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

Więc może lepiej:

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

Ostatni drukowany zmienna ekspresja „_” jest znana tylko w konsola Pythona, więc bez wyraźnej atrybucji nie można w tym celu użyć skryptu/modułu.

0

Ponieważ ta ma charakter polecenia, to pewnie go sformatować blisko swojej przykład coś takiego:

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

Zajęło mi dużo czasu, aby uświadomić sobie, mógłbym złamać tych wyrażeń przed kropek, który jest często bardziej czytelny niż łamanie wewnątrz nawiasów (to samo dotyczy "jakiegoś długiego łańcucha" .format()).

Gdyby to było bardziej jak oceny ekspresji, bym zawinąć całość w nawiasach, co jest uważane za bardziej „pythonic” niż markerów uzupełniających linia:

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