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?
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?
Jawaban:
Anda dapat menghapus kolom pada i
indeks 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]]
Jatuhkan beberapa kolom seperti ini:
cols = [1,2,4,5,12]
df.drop(df.columns[cols],axis=1,inplace=True)
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:
df_after_dropping = df.drop(df.columns[cols],axis=1)
inplace=True
maka Anda harus melakukan df = df.drop()
jika Anda ingin melihat perubahan df
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:
# 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').
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)
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.
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)
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)