gpt4 book ai didi

python - Pandas 数据框 : how to fill `nan` with 0s but only nans existing between valid values?

转载 作者:太空宇宙 更新时间:2023-11-03 15:30:04 24 4
gpt4 key购买 nike

我想做什么:

In [2]: b = pd.DataFrame({"a": [np.nan, 1, np.nan, 2, np.nan]})
Out[2]:
a
0 nan
1 1.000
2 nan
3 2.000
4 nan

预期输出:

      a
0 nan
1 1.000
2 0
3 2.000
4 nan

正如您在这里看到的,只有被有效值包围的 nan 会被替换为 0。

我该怎么做?

  • df.interpolate(limit_area='inside') 对我来说看起来不错,但它没有填充 0 的参数...

最佳答案

方法一:interpolate, isna, notna and loc

您可以使用interpolate,然后检查原始数据中哪些位置有NaN,哪些位置在您的插值中填充,然后将这些值替换为0 :

s = df['a'].interpolate(limit_area='inside')

m1 = b['a'].isna()
m2 = s.notna()

df.loc[m1&m2, 'a'] = 0

a
0 NaN
1 1.0
2 0.0
3 2.0
4 NaN

方法二:shiftloc:

一种更简单的方法是检查上一行和下一行是否不是 NaN 并用 0 填充这些位置:

m1 = df['a'].shift().notna()
m2 = df['a'].shift(-1).notna()
m3 = df['a'].isna()

df.loc[m1&m2&m3, 'a'] = 0

a
0 NaN
1 1.0
2 0.0
3 2.0
4 NaN

关于python - Pandas 数据框 : how to fill `nan` with 0s but only nans existing between valid values?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58463036/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com