I have a situation wherein sometimes when I read a csv
from df
I get an unwanted index-like column named unnamed:0
.
file.csv
,A,B,C 0,1,2,3 1,4,5,6 2,7,8,9
The CSV is read with this:
pd.read_csv('file.csv') Unnamed: 0 A B C 0 0 1 2 3 1 1 4 5 6 2 2 7 8 9
This is very annoying! Does anyone have an idea on how to get rid of this?
Advertisement
Answer
It’s the index column, pass pd.to_csv(..., index=False)
to not write out an unnamed index column in the first place, see the to_csv()
docs.
Example:
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 with:
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
You could also optionally tell read_csv
that the first column is the index column by passing 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