Python - pandas导出到csv或dat文件,删除None或numpy.nan

时间:2017-06-29 16:37:16

标签: python pandas null

将数据帧df导出到dat文件时,如何删除文件中的None或numpy.nan?我只需要一个空值。

df.to_csv('test.dat')

我试过了:

df = df.fillna('')

df = df.replace(numpy.nan, '') and df = df.replace(None, '')

但我仍然在csv或dat文件中看到'None'或'nan'。

3 个答案:

答案 0 :(得分:3)

使用参数

  

na_rep:string,默认为“缺少数据表示”

并将其设为“”

你可以在这里阅读:

pandas.DataFrame.to_csv

这是代码:

file=pd.DataFrame({"one":[1,2,None,3,4],"two":[5,6,7,np.nan,8]})

file.to_csv("xxxxxxx",na_rep="")

将导致: Result

答案 1 :(得分:0)

我找到了解决自己问题的方法:

df = df.replace('None','')
df = df.replace('nan','')

很明显,pandas在这里将None和numpy.nan视为字符串值。不知道为什么但这个解决方案有效。

答案 2 :(得分:0)

请在这里评论OP mentioned in his accepted answer的内容,以防其他人偶然发现。

"It is clear that somehow pandas treat None and numpy.nan as string value here. Not sure why but this solution works.
这是不正确的,并且发生的事情是原始df的列设置为字符串,或者仅“ None”和“ Nan”值设置为字符串。否则,first_answer将与.replace(np.nan,'')一起使用。

df=pd.DataFrame({
    'na_string':[1,2,'nan'],
    'na':[1,2,np.nan],
    'none_string':[1,2,'None'],
    'none':[1,2,None],
    'na_float':[1.1,1.2,np.nan],
    'mixed':[1.1,1.2,'nan']})
df

enter image description here

df.dtypes
#na_string       object
#na             float64
#none_string     object
#none           float64
#na_float       float64
#mixed           object
#dtype: object

现在请注意,当该列被分类为object时,所有naNone都不是np.nan,因为它们是字符串。

enter image description here

当您使用df.to_csv(path+'out.csv', na_rep='', index=False)甚至使用na_rep导出它们时,将保留所有字符串,但不保留实际的np.nan或其他空值。

enter image description here

如果您用np.nan替换了字符串,那么您也可以到达那里:

df.replace('None',np.nan, inplace=True)
df.replace('nan',np.nan, inplace=True)
df.to_csv(path+'out2.csv', na_rep='', index=False)

enter image description here