Es la columna de índice, pasa index=False
para no escribirla, mira los documentos
Ejemplo:
In [37]:
df = pd.DataFrame(np.random.randn(5,3), columns=list('abc'))
pd.read_csv(io.StringIO(df.to_csv()))
Out[37]:
Unnamed: 0 a b c
0 0 0.109066 -1.112704 -0.545209
1 1 0.447114 1.525341 0.317252
2 2 0.507495 0.137863 0.886283
3 3 1.452867 1.888363 1.168101
4 4 0.901371 -0.704805 0.088335
Comparar con:
In [38]:
pd.read_csv(io.StringIO(df.to_csv(index=False)))
Out[38]:
a b c
0 0.109066 -1.112704 -0.545209
1 0.447114 1.525341 0.317252
2 0.507495 0.137863 0.886283
3 1.452867 1.888363 1.168101
4 0.901371 -0.704805 0.088335
Opcionalmente, también puede decir read_csv
que la primera columna es la columna de índice pasando index_col=0
:
In [40]:
pd.read_csv(io.StringIO(df.to_csv()), index_col=0)
Out[40]:
a b c
0 0.109066 -1.112704 -0.545209
1 0.447114 1.525341 0.317252
2 0.507495 0.137863 0.886283
3 1.452867 1.888363 1.168101
4 0.901371 -0.704805 0.088335
skipcols
argumento pararead_csv
, después de leer en el csv que simplemente puede hacerdf = df.drop(columns=df.columns[0])
o simplemente puede leer las columnas primero y luego pasar los cols menos la primera columna algo asícols = pd.read_csv( ....., nrows=1).columns
y luego volver a leer de nuevodf = pd.read_csv(....., usecols=cols[1:])
esto evita la sobrecarga de la lectura una columna superflua y luego dejarla caerEs 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
conindex_col
argumentoEn mi opinión, la solución más simple sería leer la columna sin nombre como índice . Especifique un
index_col=[0]
argumento parapd.read_csv
, esto se lee en la primera columna como índice.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
:fuente
index_col=[0]
solución resolvió fácilmente este molesto problema de 'sin nombre: 0' y ahorra código de reinventar detalladamente la rueda.df.drop(df.filter(regex="Unname"),axis=1, inplace=True)
Otro caso en el que esto podría estar sucediendo es si sus datos se escribieron incorrectamente
csv
para que cada fila termine con una coma. Esto lo dejará con una columna sin nombreUnnamed: x
al final de sus datos cuando intente leerlos en undf
.fuente
usecols=range(0,10)
cortar la columna sin nombrePara obtener acceso a todas las columnas sin nombre, también puede usar expresiones regulares como
df.drop(df.filter(regex="Unname"),axis=1, inplace=True)
fuente
Simplemente elimine esa columna usando:
del df['column_name']
fuente