Es la columna de índice, pasa index=Falsepara 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_csvque 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
skipcolsargumento 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).columnsy 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_csvconindex_colargumentoEn 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.matchSi 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
csvpara que cada fila termine con una coma. Esto lo dejará con una columna sin nombreUnnamed: xal 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