Vấn đề này rất có thể là do các CSV của bạn đã được lưu cùng với nó RangeIndex
(thường không có tên). Việc khắc phục thực sự cần phải được thực hiện khi lưu DataFrame, nhưng điều này không phải lúc nào cũng là một tùy chọn.
Tránh vấn đề: read_csv
với index_col
tranh luận
IMO, giải pháp đơn giản nhất là đọc cột không tên làm chỉ mục . Chỉ định một index_col=[0]
đối số pd.read_csv
, điều này đọc trong cột đầu tiên là chỉ mục.
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
Lưu ý
Bạn có thể tránh điều này ở nơi đầu tiên bằng cách sử dụng index=False
khi tạo CSV đầu ra, nếu DataFrame của bạn không có chỉ mục để bắt đầu.
df.to_csv('file.csv', index=False)
Nhưng như đã đề cập ở trên, điều này không phải lúc nào cũng là một lựa chọn.
Giải pháp Stopgap: Lọc với str.match
Nếu bạn không thể sửa đổi mã để đọc / ghi tệp CSV, bạn chỉ có thể xóa cột bằng cách lọc bằng 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