2017-10-02 2 views
2

Diese Frage wurde in mehreren anderen Posts gestellt, aber ich konnte keine der Methoden zum Arbeiten bekommen. Das ist mein Datenrahmen:Löschen von Nullen aus einem Pandas Datenrahmen

df = pd.DataFrame([[1,2,3,4.5],[1,2,0,4,5]]) 

Ich würde gerne wissen, wie kann ich entweder:

1) Löschen von Zeilen, die jede/alle Nullen 2) Löschen Spalten enthalten, die enthalten jede/alle Nullen

um Zeilen zu löschen, die alle Nullen enthalten, dies gearbeitet:

df2 = df[~(df == 0).any(axis=1)] 
df2 = df[~(df == 0).all(axis=1)] 

Aber ich kann diese weise Spalte nicht an die Arbeit. Ich versuchte Achse = 0 gesetzt, aber das gibt mir diese Fehlermeldung:

__main__:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index. 

Irgendwelche Vorschläge?

Antwort

4

Sie werden loc dafür brauchen: in den Zeilen

df 
    0 1 2 3 4 
0 1 2 3 4 5 
1 1 2 0 4 5 

df.loc[:, ~(df == 0).any(0)] # notice the :, this means we are indexing on the columns now, not the rows 
    0 1 3 4 
0 1 2 4 5 
1 1 2 4 5 

Direkte Indizierung standardmäßig Indizierung. Sie versuchen, einen Datenrahmen mit nur zwei Zeilen zu indexieren, indem Sie [0, 1, 3, 4] verwenden, also warnt Sie pandas darüber.

+1

Angesichts der sequentiellen Natur der Daten, ich glaube, es sollte in "4, 5" statt "4,5" enden. Außerdem glaube ich nicht, dass Sie die Null in Ihrer 'any'-Methode brauchen, d. H. Nur' any() 'sollte funktionieren. – Alexander

+0

@Alexander heheh, hätte es nie realisiert. Vielen Dank. –

+0

Perfekt, vielen Dank Coldspeed !! –

Verwandte Themen