我想应用一个像fillna()
一样的函数,但取值不同于nan。不幸的是DataFrame.replace()
在我的案例中不起作用。这是一个例子:给定一个DataFrame:
df = pd.DataFrame([[1,2,3],[4,-1,-1],[5,6,-1]])
0 1 2
0 1 2.0 3.0
1 4 -1.0 -1.0
2 5 6.0 -1.0
3 7 8.0 NaN
我正在寻找一个输出的函数:
0 1 2
0 1 2.0 3.0
1 4 2.0 3.0
2 5 6.0 3.0
3 7 8.0 NaN
因此df.replace()
与to_replace=-1
和'method='ffill'
不起作用,因为它需要与列无关的value
来替换-1条目。在我的例子中,它是依赖于列的。我知道我可以用循环编码它,但我正在寻找一个有效的代码,因为它将应用于大型DataFrame。有什么建议?谢谢。
答案 0 :(得分:3)
您只需将值替换为$notice
,然后调用NaN
:
ffill
我认为你在想这个
修改强>
如果您已经有In [3]:
df.replace(-1, np.NaN).ffill()
Out[3]:
0 1 2
0 1 2 3
1 4 2 3
2 5 6 3
个值,那么创建一个布尔掩码,并在掩码的反转处再次使用NaN
更新这些元素:
ffill
另一种方法(感谢评论中的@DSM)是使用In [15]:
df[df == -1] = df[df != -1].ffill()
df
Out[15]:
0 1 2
0 1 2 3
1 4 2 3
2 5 6 3
3 7 8 NaN
基本上做同样的事情:
where