【问题标题】:How to replace `0`s with missing values according to a series of numbers in a numpy array?如何根据numpy数组中的一系列数字用缺失值替换`0`?
【发布时间】:2020-08-20 10:40:07
【问题描述】:

我有一个带有一系列intsnumpy 数组。我想用系列中的缺失值填充0s。

最初,我将这些值放在 pandas 数据框的列中,但为简单起见,我决定改用 numpy 数组发布问题。

>>> a = np.array([15, 25, 0, 45, 0, 0, 75, 85])
>>> a
>>> array([15, 25,  0, 45,  0,  0, 75, 85])

我希望输出为,

>>> array([15, 25,  35, 45,  55,  65, 75, 85])

我想在不使用循环的情况下解决这个问题,因为这会破坏使用numpypandas 的目的,并且使用循环的代码会慢得多。

我不想用新值替换整个列,这会带来更新 0s 的副作用。

我只想根据系列用缺失值更新0s。

【问题讨论】:

  • 你从哪里得到缺失值?或者你假设你有一个等差数列?
  • 你想用前一个和后一个值的平均值替换零吗?否则我不确定,我是否理解你想如何填写它们

标签: python arrays pandas numpy series


【解决方案1】:

这对于熊猫来说是直截了当的。您可以使用interpolate 应用线性插值(其默认插值方法为linear):

a = np.array([15, 25, 0, 45, 0, 0, 75, 85])
s = pd.Series(a)
s.mask(s.eq(0)).interpolate()

0    15.0
1    25.0
2    35.0
3    45.0
4    55.0
5    65.0
6    75.0
7    85.0
dtype: float64

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多