É a coluna do índice, passe index=False
para não escrever, veja os documentos
Exemplo:
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
compare com:
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, você também pode dizer read_csv
que a primeira coluna é a coluna de índice passando 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
, depois de ler no csv, você pode simplesmente fazerdf = df.drop(columns=df.columns[0])
ou você pode apenas ler as colunas primeiro e depois passar as colunas menos a primeira coluna como algocols = pd.read_csv( ....., nrows=1).columns
e, em seguida, reler novamente,df = pd.read_csv(....., usecols=cols[1:])
evitando a sobrecarga da leitura uma coluna supérfluo e, em seguida, deixá-la cair depoisEsse problema provavelmente se manifesta porque seu CSV foi salvo junto com ele
RangeIndex
(que geralmente não tem nome). A correção precisaria ser feita ao salvar o DataFrame, mas isso nem sempre é uma opção.Evitando o problema:
read_csv
comindex_col
argumentoNa IMO, a solução mais simples seria ler a coluna sem nome como índice . Especifique um
index_col=[0]
argumento parapd.read_csv
, isso será lido na primeira coluna como o índice.Solução paliativa: Filtrando com
str.match
Se você não pode modificar o código para ler / gravar o arquivo CSV, basta remover a coluna filtrando com
str.match
:fonte
index_col=[0]
correção resolveu facilmente esse problema irritante de 'unnamed: 0' e poupa o código de reinventar a roda detalhadamente.df.drop(df.filter(regex="Unname"),axis=1, inplace=True)
Outro caso em que isso pode estar acontecendo é se seus dados foram gravados incorretamente no seu
csv
para que cada linha termine com uma vírgula. Isso deixará uma coluna sem nomeUnnamed: x
no final dos seus dados quando você tentar lê-los em um arquivodf
.fonte
usecols=range(0,10)
para cortar a coluna sem nomePara acompanhar todas as colunas Sem nome, você também pode usar regex como
df.drop(df.filter(regex="Unname"),axis=1, inplace=True)
fonte
Simplesmente exclua essa coluna usando:
del df['column_name']
fonte