为什么假人' 0'在pd.read_csv()之后创建的行?

时间:2018-03-25 13:41:50

标签: python pandas

为什么还有一行名为' 0'在read_csv之后?

在下面的代码中,我将df1保存到csv文件并将其读回。但是,还有一行名为' 0'。我怎么能避免呢?

d1 = {'a' : 1, 'b' : 2, 'c' : 3}
df1=pd.Series(d1)
print('\ndf1:'); print(df1)

> df1:
> a    1
> b    2
> c    3
> dtype: int64

df1.to_csv("df1.csv")
df1=pd.read_csv("df1.csv",  index_col=0, header=None)
print('\ndf1:'); print(df1)

> df1:
>   1
> 0    <<<<---- ????
> a  1
> b  2
> c  3

2 个答案:

答案 0 :(得分:1)

这不是虚拟行 - 这是索引列的名称。

您可以通过运行来检查它:

> df.index.name
0

您也可以通过设置来更改它:

> df.index.name = "my_index"

          1
my_index   
a         1
b         2
c         3

答案 1 :(得分:1)

避免它的一种方法是创建一个DataFrame(如您的变量名所示)而不是系列(您有atm)。

import pandas as pd
d1 = {'a' : 1, 'b' : 2, 'c' : 3}
df1 = pd.Series(d1).to_frame()    # Use to_frame() here
df1.to_csv("df1.csv")
df1 = pd.read_csv("df1.csv", index_col=0)

print(df1)给出:

   0
a  1
b  2
c  3

另一种解决方案是在导入时实际指定名称。 如果您选择此解决方案,我会在您创建可读性系列时将df1重命名为s1。

df1 = pd.read_csv("df1.csv", names=['index','values'], index_col='index')

你得到:

       values
index        
a           1
b           2
c           3

完整示例:

d1 = {'a' : 1, 'b' : 2, 'c' : 3}
s1 = pd.Series(d1)
print('s1:\n{}\n'.format(s1))

s1.to_csv("df1.csv")
df1 = pd.read_csv("df1.csv", names=['index','values'], index_col='index')
print('df1:\n{}\n'.format(df1))