python dataframe panda drop kolom menggunakan int


Jawaban:


167

Anda dapat menghapus kolom pada iindeks seperti ini:

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

Ini bisa jadi aneh, jika Anda memiliki nama duplikat di kolom, jadi untuk melakukan ini Anda bisa mengganti nama kolom yang ingin Anda hapus kolom dengan nama baru. Atau Anda dapat menetapkan kembali DataFrame seperti ini:

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

4
Saya pikir Anda melewatkan intinya - mereka ingin turun demi indeks, bukan dengan label. Mengubah indeks menjadi label hanya dengan menjatuhkan label :(
Darren

Bagaimana cara mengindeks cols, jika saya harus menjatuhkan 100 kolom yang kontinu di tengah bingkai data
Sai Kiran

111

Jatuhkan beberapa kolom seperti ini:

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

inplace=Truedigunakan untuk membuat perubahan dalam kerangka data itu sendiri tanpa melakukan kolom menjatuhkan salinan bingkai data. Jika Anda perlu mempertahankan yang asli, gunakan:

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

3
Untuk apa argumen inplace?
sidpat

12
jika Anda tidak menggunakan inplace=Truemaka Anda harus melakukan df = df.drop()jika Anda ingin melihat perubahan dfitu sendiri.
muon

Bagaimana cara mengindeks cols, jika saya harus menjatuhkan 100 kolom yang kontinu di tengah bingkai data.
Sai Kiran

36

Jika ada beberapa kolom dengan nama yang identik, solusi yang diberikan di sini sejauh ini akan menghapus semua kolom, yang mungkin bukan yang dicari orang. Ini mungkin terjadi jika seseorang mencoba untuk menghapus kolom duplikat kecuali satu contoh. Contoh di bawah ini menjelaskan situasi ini:

# 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

Seperti yang Anda lihat, kedua kolom X dijatuhkan. Solusi alternatif:

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

Seperti yang Anda lihat, ini benar-benar hanya menghapus kolom 0 (pertama 'x').


1
Kamu adalah pahlawan ku. Sedang berusaha memikirkan cara pintar untuk melakukan ini terlalu lama.
ATK7474

5

Anda perlu mengidentifikasi kolom berdasarkan posisi mereka dalam bingkai data. Misalnya, jika Anda ingin menjatuhkan (del) nomor kolom 2,3 dan 5, itu akan menjadi,

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

4

Jika Anda memiliki dua kolom dengan nama yang sama. Salah satu cara sederhana adalah mengubah nama kolom secara manual seperti ini: -

df.columns = ['column1', 'column2', 'column3']

Kemudian Anda dapat turun melalui indeks kolom seperti yang Anda minta, seperti ini: -

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

df.column[1] akan turun indeks 1.

Ingat sumbu 1 = kolom dan sumbu 0 = baris.


3

jika Anda benar-benar ingin melakukannya dengan bilangan bulat (tapi mengapa?), maka Anda bisa membuat kamus.

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

maka df = df.drop(col_dict[0], 1)akan bekerja sesuai yang diinginkan

sunting: Anda dapat meletakkannya di fungsi yang melakukan itu untuk Anda, meskipun cara ini membuat kamus setiap kali Anda menyebutnya

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)

1

Anda dapat menggunakan baris berikut untuk menjatuhkan dua kolom pertama (atau kolom apa pun yang tidak Anda butuhkan):

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

Referensi


-1

Karena mungkin ada beberapa kolom dengan nama yang sama, pertama-tama kita harus mengganti nama kolom. Berikut ini kode untuk solusinya.

df.columns=list(range(0,len(df.columns)))
df.drop(columns=[1,2])#drop second and third columns
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.