webentwicklung-frage-antwort-db.com.de

python dataframe pandas drop column mit int

Ich verstehe, dass Sie zum Löschen einer Spalte df.drop ('Spaltenname', Achse = 1) verwenden. Gibt es eine Möglichkeit, eine Spalte mithilfe eines numerischen Index anstelle des Spaltennamens zu löschen?

88
user1802143

Sie können eine Spalte im i-Index folgendermaßen löschen:

df.drop(df.columns[i], axis=1)

Es kann seltsam funktionieren, wenn Sie doppelte Namen in Spalten haben. Um dies zu tun, können Sie die Spalte, die Sie löschen möchten, umbenennen. Oder Sie können DataFrame folgendermaßen neu zuweisen:

df = df.iloc[:, [j for j, c in enumerate(df.columns) if j != i]]
99
Roman Pekar

Mehrere Spalten wie folgt löschen:

cols = [1,2,4,5,12]
df.drop(df.columns[cols],axis=1,inplace=True)
62
muon

Wenn mehrere Spalten mit identischen Namen vorhanden sind, werden bei den hier angegebenen Lösungen alle Spalten entfernt. Dies ist möglicherweise nicht das, wonach 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, hat dies wirklich nur die 0-te Spalte (erstes "x") entfernt.

15
Saeed

wenn Sie es wirklich mit ganzen Zahlen tun wollen (aber warum?), können Sie ein Wörterbuch erstellen.

col_dict = {x: col for x, col in enumerate(df.columns)}

dann funktioniert df = df.drop(col_dict[0], 1) wie gewünscht

edit: Sie können es in eine Funktion einfügen, die das für Sie tut. Auf diese Weise wird das Wörterbuch bei jedem Aufruf erstellt

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)
3
mkln

Sie müssen die Spalten anhand ihrer Position im Datenrahmen identifizieren. Wenn Sie beispielsweise die Spaltennummern 2,3 und 5 löschen möchten, ist dies:

df.drop(df.columns[[2,3,5]], axis = 1)
0
Kripalu Sar

Sie können die folgende Zeile verwenden, um die ersten beiden Spalten (oder alle nicht benötigten Spalten) zu löschen:

df.drop([df.columns[0], df.columns[1]], axis=1)

Referenz

0
Mojtaba Peyrovi

Da es mehrere Spalten mit demselben Namen geben kann, sollten Sie zuerst die Spalten umbenennen. Hier ist Code für die Lösung.

df.columns=list(range(0,len(df.columns)))
df.drop(columns=[1,2])#drop second and third columns
0
Thunder