Pandas保存为CSV时更改NaN值的格式

问题描述 投票:5回答:3

我正在使用df并使用numpy来转换数据 - 包括将空白(或'')设置为NaN。但是当我把df写入csv时 - 输出包含字符串'nan'而不是NULL。

我环顾四周但找不到可行的解决方案。这是基本问题:

df
index x    y   z
0     1   NaN  2
1     NaN  3   4

CSV输出:

index x    y   z
0     1   nan  2
1     nan  3   4

我尝试了一些东西将'nan'设置为NULL,但csv输出导致'空'而不是NULL:

dfDemographics = dfDemographics.replace('nan', np.NaN)
dfDemographics.replace(r'\s+( +\.)|#', np.nan, regex=True).replace('', 
np.nan)
dfDemographics = dfDemographics.replace('nan', '')  # of course, this wouldn't work, but tried it anyway.

任何帮助,将不胜感激。

python pandas csv nan
3个回答
8
投票

拯救熊猫,使用na_rep来修复你自己的NaNs表示。

df.to_csv('file.csv', na_rep='NULL')

file.csv

,index,x,y,z
0,0,1.0,NULL,2
1,1,NULL,3.0,4

0
投票

使用df.replace可能会有所帮助 -

df = df.replace(np.nan, '', regex=True)
df.to_csv("df.csv", index=False)

(这会将所有空值设置为'',即空字符串。)


0
投票

用户@coldspeed说明了在保存pd.DataFrame时如何用NULL替换nan值。如果对于数据分析,有兴趣用np.NaN值替换pd.DataFrame中的“NULL”值,以下代码将执行:

import numpy as np, pandas as pd

# replace NULL values with np.nan
colNames = mydf.columns.tolist()
dfVals = mydf.values
matSyb = mydf.isnull().values
dfVals[matSyb] = np.NAN

mydf = pd.DataFrame(dfVals, columns=colNames)    
#np.nansum(mydf.values, axis=0 )
#np.nansum(dfVals, axis=0 )
© www.soinside.com 2019 - 2024. All rights reserved.