Masalah ini kemungkinan besar bermanifestasi karena CSV Anda disimpan bersama dengan RangeIndex
(yang biasanya tidak memiliki nama). Perbaikan sebenarnya perlu dilakukan saat menyimpan DataFrame, tetapi ini tidak selalu merupakan opsi.
Menghindari Masalah: read_csv
dengan index_col
argumen
IMO, solusi paling sederhana adalah dengan membaca kolom yang tidak disebutkan namanya sebagai indeks . Tentukan index_col=[0]
argumen untuk pd.read_csv
, ini dibaca di kolom pertama sebagai indeks.
df = pd.DataFrame('x', index=range(5), columns=list('abc'))
df
a b c
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
# Save DataFrame to CSV.
df.to_csv('file.csv')
pd.read_csv('file.csv')
Unnamed: 0 a b c
0 0 x x x
1 1 x x x
2 2 x x x
3 3 x x x
4 4 x x x
# Now try this again, with the extra argument.
pd.read_csv('file.csv', index_col=[0])
a b c
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Catatan
Anda bisa menghindari ini sejak awal dengan menggunakan index=False
saat membuat CSV output, jika DataFrame Anda tidak memiliki indeks untuk memulai.
df.to_csv('file.csv', index=False)
Tapi seperti yang disebutkan di atas, ini tidak selalu menjadi pilihan.
Solusi Stopgap: Memfilter dengan str.match
Jika Anda tidak dapat mengubah kode untuk membaca / menulis file CSV, Anda bisa menghapus kolom dengan memfilter dengan str.match
:
df
Unnamed: 0 a b c
0 0 x x x
1 1 x x x
2 2 x x x
3 3 x x x
4 4 x x x
df.columns
# Index(['Unnamed: 0', 'a', 'b', 'c'], dtype='object')
df.columns.str.match('Unnamed')
# array([ True, False, False, False])
df.loc[:, ~df.columns.str.match('Unnamed')]
a b c
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x