348 Stimmen

Wie man eine Liste von Zeilen aus Pandas dataframe fallen?

Ich habe einen Datenrahmen df :

>>> df
                  sales  discount  net_sales    cogs
STK_ID RPT_Date                                     
600141 20060331   2.709       NaN      2.709   2.245
       20060630   6.590       NaN      6.590   5.291
       20060930  10.103       NaN     10.103   7.981
       20061231  15.915       NaN     15.915  12.686
       20070331   3.196       NaN      3.196   2.710
       20070630   7.907       NaN      7.907   6.459

Dann möchte ich Zeilen mit bestimmten Sequenznummern auslassen, die in einer Liste angegeben sind, z.B. [1,2,4], dann nach links:

                  sales  discount  net_sales    cogs
STK_ID RPT_Date                                     
600141 20060331   2.709       NaN      2.709   2.245
       20061231  15.915       NaN     15.915  12.686
       20070630   7.907       NaN      7.907   6.459

Wie oder welche Funktion kann das tun?

17voto

Divyansh Punkte 339

Wenn ich eine Zeile löschen möchte, die, sagen wir, den Index x würde ich wie folgt vorgehen:

df = df[df.index != x]

Wenn ich mehrere Indizes löschen möchte (z. B. diese Indizes sind in der Liste unwanted_indices ), würde ich tun:

desired_indices = [i for i in len(df.index) if i not in unwanted_indices]
desired_df = df.iloc[desired_indices]

12voto

Ozkan Serttas Punkte 897

Hier möchte ich ein etwas spezifisches Beispiel zeigen. Angenommen, Sie haben viele doppelte Einträge in einigen Ihrer Zeilen. Wenn Sie String-Einträge haben, können Sie leicht String-Methoden verwenden, um alle zu löschenden Indizes zu finden.

ind_drop = df[df['column_of_strings'].apply(lambda x: x.startswith('Keyword'))].index

Und jetzt, um diese Zeilen mit Hilfe ihrer Indizes zu löschen

new_df = df.drop(ind_drop)

7voto

kamran kausar Punkte 3343

Verwenden Sie nur das Argument Index, um die Zeile zu löschen:-

df.drop(index = 2, inplace = True)

Für mehrere Zeilen:-

df.drop(index=[1,3], inplace = True)

3voto

mepstein Punkte 133

In einem Kommentar zur Antwort von @theodros-zelleke fragte @j-jones, was zu tun sei, wenn der Index nicht eindeutig ist. Ich hatte mit einer solchen Situation zu tun. Ich habe die Duplikate im Index umbenannt, bevor ich die Funktion drop() , a la:

dropped_indexes = <determine-indexes-to-drop>
df.index = rename_duplicates(df.index)
df.drop(df.index[dropped_indexes], inplace=True)

donde rename_duplicates() ist eine von mir definierte Funktion, die die Elemente von index durchläuft und die Duplikate umbenennt. Ich benutzte das gleiche Umbenennungsmuster wie pd.read_csv() auf Spalten verwendet, d.h., "%s.%d" % (name, count) donde name ist der Name der Zeile und count ist, wie oft es schon vorgekommen ist.

3voto

Adam Zeldin Punkte 848

Ermittlung des Index aus dem Booleschen wie oben beschrieben, z.B.

df[df['column'].isin(values)].index

kann speicherintensiver sein als die Ermittlung des Index mit dieser Methode

pd.Index(np.where(df['column'].isin(values))[0])

so angewendet

df.drop(pd.Index(np.where(df['column'].isin(values))[0]), inplace = True)

Diese Methode ist nützlich, wenn es um große Datenrahmen und begrenzten Speicher geht.

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