1030 Stimmen

Löschen von DataFrame-Zeile in Pandas basierend auf dem Spaltenwert

Ich habe das folgende DataFrame:

             daysago  line_race rating        rw    wrating
 line_date                                                 
2007-03-31       62         11     56  1.000000  56.000000
2007-03-10       83         11     67  1.000000  67.000000
2007-02-10      111          9     66  1.000000  66.000000
2007-01-13      139         10     83  0.880678  73.096278
2006-12-23      160         10     88  0.793033  69.786942
2006-11-09      204          9     52  0.636655  33.106077
2006-10-22      222          8     66  0.581946  38.408408
2006-09-29      245          9     70  0.518825  36.317752
2006-09-16      258         11     68  0.486226  33.063381
2006-08-30      275          8     72  0.446667  32.160051
2006-02-11      475          5     65  0.164591  10.698423
2006-01-13      504          0     70  0.142409   9.968634
2006-01-02      515          0     64  0.134800   8.627219
2005-12-06      542          0     70  0.117803   8.246238
2005-11-29      549          0     70  0.113758   7.963072
2005-11-22      556          0     -1  0.109852  -0.109852
2005-11-01      577          0     -1  0.098919  -0.098919
2005-10-20      589          0     -1  0.093168  -0.093168
2005-09-27      612          0     -1  0.083063  -0.083063
2005-09-07      632          0     -1  0.075171  -0.075171
2005-06-12      719          0     69  0.048690   3.359623
2005-05-29      733          0     -1  0.045404  -0.045404
2005-05-02      760          0     -1  0.039679  -0.039679
2005-04-02      790          0     -1  0.034160  -0.034160
2005-03-13      810          0     -1  0.030915  -0.030915
2004-11-09      934          0     -1  0.016647  -0.016647

Ich muss die Zeilen entfernen, in denen line_race gleich 0 ist. Was ist der effizienteste Weg, dies zu tun?

1573voto

tshauck Punkte 18988

Wenn ich das richtig verstehe, sollte es so einfach sein wie:

df = df[df.line_race != 0]

313voto

wonderkid2 Punkte 4504

Aber für zukünftige Passanten könntest du erwähnen, dass df = df[df.line_race != 0] nicht funktioniert, wenn man nach None/fehlenden Werten filtern möchte.

Funktioniert:

df = df[df.line_race != 0]

Macht nichts:

df = df[df.line_race != None]

Funktioniert:

df = df[df.line_race.notnull()]

165voto

desmond Punkte 1863

Nur um eine weitere Lösung hinzuzufügen, besonders nützlich, wenn Sie die neuen Pandas assessors verwenden, andere Lösungen werden die ursprünglichen Pandas ersetzen und die assessors verlieren

df.drop(df.loc[df['line_race']==0].index, inplace=True)

78voto

Mo_Offical Punkte 821

Im Falle von mehreren Werten und dem Datenformat str

Ich habe Folgendes verwendet, um gegebene Werte in einer Spalte zu filtern:

def filter_rows_by_values(df, col, values):
    return df[~df[col].isin(values)]

Beispiel:

In einem DataFrame möchte ich Zeilen entfernen, die die Werte "b" und "c" in der Spalte "str" haben

df = pd.DataFrame({"str": ["a","a","a","a","b","b","c"], "other": [1,2,3,4,5,6,7]})
df
   str  other
0   a   1
1   a   2
2   a   3
3   a   4
4   b   5
5   b   6
6   c   7

filter_rows_by_values(df, "str", ["b","c"])

   str  other
0   a   1
1   a   2
2   a   3
3   a   4

72voto

Robvh Punkte 1029

Wenn Sie Zeilen basierend auf mehreren Werten der Spalte löschen möchten, könnten Sie dies verwenden:

df[(df.line_race != 0) & (df.line_race != 10)]

Um alle Zeilen mit den Werten 0 und 10 für line_race zu löschen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X