cs9*_*s95 14 python replace pandas
鉴于一系列
s = pd.Series([1.1, 1.2, np.nan])
s
0 1.1
1 1.2
2 NaN
dtype: float64
Run Code Online (Sandbox Code Playgroud)
如果需要将NaN转换为无(例如,与parquets一起工作),那么我希望有
0 1.1
1 1.2
2 None
dtype: object
Run Code Online (Sandbox Code Playgroud)
我认为Series.replace这将是显而易见的方式,但这是函数返回的内容:
s.replace(np.nan, None)
0 1.1
1 1.2
2 1.2
dtype: float64
Run Code Online (Sandbox Code Playgroud)
NaN向前填充,而不是被替换.通过文档,我看到如果第二个参数是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
Run Code Online (Sandbox Code Playgroud)
哪个好.但我想了解为什么会出现这种情况,是否记录在案,或者它只是一个错误而且我必须清除我的git配置文件并在问题跟踪器上记录一个...任何想法?
这是行为在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.
Run Code Online (Sandbox Code Playgroud)
所以在你的例子中to_replace是一个标量,而且value是None.默认情况下pad,该方法来自fillna的文档:
pad / ffill: propagate last valid observation forward to next valid
Run Code Online (Sandbox Code Playgroud)