Ich verstehe, dass Sie zum Löschen einer Spalte df.drop verwenden ('Spaltenname', Achse = 1). Gibt es eine Möglichkeit, eine Spalte mithilfe eines numerischen Index anstelle des Spaltennamens zu löschen?
Ich verstehe, dass Sie zum Löschen einer Spalte df.drop verwenden ('Spaltenname', Achse = 1). Gibt es eine Möglichkeit, eine Spalte mithilfe eines numerischen Index anstelle des Spaltennamens zu löschen?
Antworten:
Sie können die Spalte im i
Index folgendermaßen löschen :
df.drop(df.columns[i], axis=1)
Es könnte seltsam funktionieren, wenn Sie doppelte Namen in Spalten haben. Um dies zu tun, können Sie die Spalte, die Sie löschen möchten, durch einen neuen Namen umbenennen. Oder Sie können DataFrame folgendermaßen neu zuweisen:
df = df.iloc[:, [j for j, c in enumerate(df.columns) if j != i]]
Löschen Sie mehrere Spalten wie folgt:
cols = [1,2,4,5,12]
df.drop(df.columns[cols],axis=1,inplace=True)
inplace=True
wird verwendet, um die Änderungen im Datenrahmen selbst vorzunehmen, ohne dass die Spalte auf einer Kopie des Datenrahmens abgelegt wird. Wenn Sie Ihr Original intakt halten müssen, verwenden Sie:
df_after_dropping = df.drop(df.columns[cols],axis=1)
inplace=True
, müssen df = df.drop()
Sie tun, wenn Sie die Änderung an df
sich sehen möchten .
Wenn es mehrere Spalten mit identischen Namen gibt, werden mit den hier angegebenen Lösungen alle Spalten entfernt, nach denen möglicherweise nicht gesucht wird. Dies kann der Fall sein, wenn versucht wird, doppelte Spalten mit Ausnahme einer Instanz zu entfernen. Das folgende Beispiel verdeutlicht diese Situation:
# make a df with duplicate columns 'x'
df = pd.DataFrame({'x': range(5) , 'x':range(5), 'y':range(6, 11)}, columns = ['x', 'x', 'y'])
df
Out[495]:
x x y
0 0 0 6
1 1 1 7
2 2 2 8
3 3 3 9
4 4 4 10
# attempting to drop the first column according to the solution offered so far
df.drop(df.columns[0], axis = 1)
y
0 6
1 7
2 8
3 9
4 10
Wie Sie sehen können, wurden beide Xs-Spalten gelöscht. Alternative Lösung:
column_numbers = [x for x in range(df.shape[1])] # list of columns' integer indices
column_numbers .remove(0) #removing column integer index 0
df.iloc[:, column_numbers] #return all columns except the 0th column
x y
0 0 6
1 1 7
2 2 8
3 3 9
4 4 10
Wie Sie sehen können, wurde dadurch wirklich nur die 0. Spalte (erstes 'x') entfernt.
Sie müssen die Spalten anhand ihrer Position im Datenrahmen identifizieren. Wenn Sie beispielsweise die Spaltennummern 2,3 und 5 löschen (löschen) möchten, ist dies:
df.drop(df.columns[[2,3,5]], axis = 1)
Wenn Sie zwei Spalten mit demselben Namen haben. Eine einfache Möglichkeit besteht darin, die Spalten manuell wie folgt umzubenennen:
df.columns = ['column1', 'column2', 'column3']
Dann können Sie wie gewünscht über den Spaltenindex löschen: -
df.drop(df.columns[1], axis=1, inplace=True)
df.column[1]
wird Index 1 löschen.
Denken Sie daran, Achse 1 = Spalten und Achse 0 = Zeilen.
Wenn Sie es wirklich mit ganzen Zahlen machen wollen (aber warum?), können Sie ein Wörterbuch erstellen.
col_dict = {x: col for x, col in enumerate(df.columns)}
dann df = df.drop(col_dict[0], 1)
funktioniert wie gewünscht
Bearbeiten: Sie können es in eine Funktion einfügen, die dies für Sie erledigt. Auf diese Weise wird das Wörterbuch jedoch jedes Mal erstellt, wenn Sie es aufrufen
def drop_col_n(df, col_n_to_drop):
col_dict = {x: col for x, col in enumerate(df.columns)}
return df.drop(col_dict[col_n_to_drop], 1)
df = drop_col_n(df, 2)
Sie können die folgende Zeile verwenden, um die ersten beiden Spalten (oder jede Spalte, die Sie nicht benötigen) zu löschen:
df.drop([df.columns[0], df.columns[1]], axis=1)