我正在使用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输出结果是'blank'而不是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.
如果你能帮忙的话,我将不胜感激。
6条答案
按热度按时间dsf9zpds1#
Pandas来拯救,使用
na_rep
来修复您自己的NaN表示。file.csv
f1tvaqid2#
使用df.replace可能会有帮助-
(This将所有null值设置为'',即空字符串。
7vux5j2d3#
在我的情况下,罪魁祸首是
np.where
。当两个返回元素的数据类型不同时,np.NaN
将被转换为nan
。(对我来说)很难确切地看到幕后发生了什么,但我怀疑这可能适用于其他具有混合类型的Numpy数组方法。
一个最小的例子:
那么如何解决这个问题呢?我不太确定,但作为小型数据集的一种变通方法,您可以将原始序列中的
NaN
替换为标记字符串,然后将其替换回np.NaN
nwlls2ji4#
根据gherka和Kranthi Kiran的回答:
wj8zmpe15#
我想有人已经发布了这个,但你拒绝了它,因为在文件中显示'NULL'字符串:
现在我明白你想要一个实际的空白值。CSV是文本文件,空白文本只是空的stting '',所以解决方案是使用它:
这对我很有效。其他一些解决方案可能仍然有效,但这是迄今为止最简单和最直接的。如果这是一个固定宽度的文件,你必须用空格来替换这个字段的宽度,但是对于csv你不需要空格,只需要空字符串。
PS:我本来想对其他用户的回复发表评论,但我是新用户,因此还不允许发表评论。也就是说,任何支持都值得赞赏。
fgw7neuy6#
User @coldspeed演示了如何在保存pd. DataFrame时将nan值替换为NULL。在数据分析中,如果有兴趣将pd.DataFrame中的“NULL”值替换为np.NaN值,则可以使用以下代码: