大熊猫有没有办法只插入一个缺失的数据点?也就是说,如果有2个连续的NaN,我想让他们独自一人.
所以,举个例子:
s = pd.Series([1, None, 2, 3, None, None, 4.5])
d.interpolate(limit=1)
给我:
[ 1.0, 1.5, 2.0, 3.0, 3.5, NaN, 4.5 ]
但是我想得到
[ 1.0, 1.5, 2.0, 3.0, NaN, NaN, 4.5 ]
如果它有帮助,我有一个索引列表,其中只有一个缺失值.
解决方法:
我的观点是,这将是一个包含插值的强大功能.
也就是说,这可以归结为掩盖存在多个np.nan的地方.我将在一个方便的函数中用一些numpy逻辑包装它.
def cnan(s):
v = s.values
k = v.size
n = np.append(np.isnan(v), False)
m = np.empty(k, np.bool8)
m.fill(True)
i = np.where(n[:-1] & n[1:])[0] + np.arange(2)
m[i[i < k]] = False
return m
s.interpolate().where(cnan(s))
0 1.0
1 1.5
2 2.0
3 3.0
4 NaN
5 NaN
6 4.5
dtype: float64
对于那些对使用高级numpy技术的一般解决方案感兴趣的人
import pandas as pd
import numpy as np
from numpy.lib.stride_tricks import as_strided as strided
def mask_knans(a, x):
a = np.asarray(a)
k = a.size
n = np.append(np.isnan(a), [False] * (x - 1))
m = np.empty(k, np.bool8)
m.fill(True)
s = n.strides[0]
i = np.where(strided(n, (k + 1 - x, x), (s, s)).all(1))[0][:, None]
i = i + np.arange(x)
i = pd.unique(i[i < k])
m[i] = False
return m
演示
a = np.array([1, np.nan, np.nan, np.nan, 3, np.nan, 4, 5, np.nan, np.nan, 6, 7])
print(mask_knans(a, 3))
[ True False False False True True True True True True True True]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。