Es probable que este problema se manifieste porque su CSV se guardó junto con su RangeIndex
(que generalmente no tiene un nombre). La solución realmente debería hacerse al guardar el DataFrame, pero esto no siempre es una opción.
Evitando el problema: read_csv
con index_col
argumento
En mi opinión, la solución más simple sería leer la columna sin nombre como índice . Especifique un index_col=[0]
argumento para pd.read_csv
, esto se lee en la primera columna como índice.
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
Nota:
En primer lugar, podría haber evitado esto al usar index=False
el CSV de salida, si su DataFrame no tiene un índice para empezar.
df.to_csv('file.csv', index=False)
Pero como se mencionó anteriormente, esto no siempre es una opción.
Solución provisional: filtrado con str.match
Si no puede modificar el código para leer / escribir el archivo CSV, puede eliminar la columna filtrándola con 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