熊猫将NaN替换为“ None”,这不符合直觉

时间:2019-01-03 11:35:09

标签: python pandas replace

给出一系列

s = pd.Series([1.1, 1.2, np.nan])
s
0    1.1
1    1.2
2    NaN
dtype: float64

如果需要将NaN转换为None(例如,用于镶木地板),那么我想拥有

0     1.1
1     1.2
2    None
dtype: object

我认为Series.replace是这样做的明显方式,但这是函数返回的内容:

s.replace(np.nan, None)

0    1.1
1    1.2
2    1.2
dtype: float64

NaN被向前填充,而不是被替换。通过docs,我看到如果第二个参数为None,则第一个参数应为字典。基于此,我希望replace可以按预期进行替换,或者引发异常。

我相信这里的解决方法是

pd.Series([x if pd.notna(x) else None for x in s], dtype=object) 
0     1.1
1     1.2
2    None
dtype: object

哪个好。但是我想了解为什么会发生这种行为,无论它是有记录的,还是仅仅是一个错误,我都必须清除git配置文件并将其记录在问题跟踪器上...有什么想法吗?

1 个答案:

答案 0 :(得分:6)

此行为在$import = Get-Content C:\bookmarks.html -Raw $newbody = Get-Content C:\newbookmarks.html $remove = "(?<=$([regex]::Escape('<DT><H3 ADD_DATE="1544626193" LAST_MODIFIED="1546498855">Import-IE</H3>'))).*?(?=</DL>)" $import -replace "(?s)$remove","$newbody" 参数的文档中:

method

因此,在您的示例中,method : {‘pad’, ‘ffill’, ‘bfill’, None} The method to use when for replacement, when to_replace is a scalar, list or tuple and value is None. 标量,而to_replacevalue。根据{{​​3}}的文档,默认情况下该方法为None

pad