Saya mengerti bahwa untuk menjatuhkan kolom Anda menggunakan df.drop ('nama kolom', sumbu = 1). Apakah ada cara untuk menjatuhkan kolom menggunakan indeks numerik alih-alih nama kolom?
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]]
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
inplace=Truedigunakan untuk membuat perubahan dalam kerangka data itu sendiri tanpa melakukan kolom menjatuhkan salinan bingkai data. Jika Anda perlu mempertahankan yang asli, gunakan:
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
000611172228333944410# attempting to drop the first column according to the solution offered so far
df.drop(df.columns[0], axis =1)
y
06172839410
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
0061172283394410
Seperti yang Anda lihat, ini benar-benar hanya menghapus kolom 0 (pertama 'x').
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,
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)
Jawaban:
Anda dapat menghapus kolom pada
i
indeks seperti ini: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:
sumber
Jatuhkan beberapa kolom seperti ini:
inplace=True
digunakan untuk membuat perubahan dalam kerangka data itu sendiri tanpa melakukan kolom menjatuhkan salinan bingkai data. Jika Anda perlu mempertahankan yang asli, gunakan:sumber
inplace=True
maka Anda harus melakukandf = df.drop()
jika Anda ingin melihat perubahandf
itu sendiri.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:
Seperti yang Anda lihat, kedua kolom X dijatuhkan. Solusi alternatif:
Seperti yang Anda lihat, ini benar-benar hanya menghapus kolom 0 (pertama 'x').
sumber
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,
sumber
Jika Anda memiliki dua kolom dengan nama yang sama. Salah satu cara sederhana adalah mengubah nama kolom secara manual seperti ini: -
Kemudian Anda dapat turun melalui indeks kolom seperti yang Anda minta, seperti ini: -
df.column[1]
akan turun indeks 1.Ingat sumbu 1 = kolom dan sumbu 0 = baris.
sumber
jika Anda benar-benar ingin melakukannya dengan bilangan bulat (tapi mengapa?), maka Anda bisa membuat kamus.
maka
df = df.drop(col_dict[0], 1)
akan bekerja sesuai yang diinginkansunting: Anda dapat meletakkannya di fungsi yang melakukan itu untuk Anda, meskipun cara ini membuat kamus setiap kali Anda menyebutnya
sumber
Anda dapat menggunakan baris berikut untuk menjatuhkan dua kolom pertama (atau kolom apa pun yang tidak Anda butuhkan):
Referensi
sumber
Karena mungkin ada beberapa kolom dengan nama yang sama, pertama-tama kita harus mengganti nama kolom. Berikut ini kode untuk solusinya.
sumber