python - 为什么 pandas.interpolate() 会插入被 NaN 包围的单个值?
问题描述
我对熊猫 interpolate() 有疑问。我只想在不超过 2 个连续的“np.nans”时进行插值。但是当有超过 2 个 np.nans 时,插值函数也会尝试插值单个值!?
s = pd.Series(data = [np.nan,10,np.nan,np.nan,np.nan,5,np.nan,6,np.nan,np.nan,30])
a = s.interpolate(limit=2,limit_area='inside')
print(a)
我得到的输出是:
0 NaN
1 10.00
2 8.75
3 7.50
4 NaN
5 5.00
6 5.50
7 6.00
8 14.00
9 22.00
10 30.00
dtype: float64
我不想要第 2 行和第 3 行的结果。我想要的是:
0 NaN
1 10.00
2 NaN
3 NaN
4 NaN
5 5.00
6 5.50
7 6.00
8 14.00
9 22.00
10 30.00
dtype: float64
有人可以帮忙吗?
解决方案
Groupby.transform
和Series.where
s_notna = s.notna()
m = (s.groupby(s_notna.cumsum()).transform('size').le(3) | s_notna)
s = s.interpolate(limit_are='inside').where(m)
print(s)
输出
0 NaN
1 10.0
2 NaN
3 NaN
4 NaN
5 5.0
6 5.5
7 6.0
8 14.0
9 22.0
10 30.0
dtype: float64
推荐阅读
- ios - 将 Http.MultipartRequest 作为数组发送?
- python - 运行 python 脚本/模块/包时用于查找导入的路径是什么?
- javascript - ngx-quill 图像在服务器上上传后不呈现
- javascript - 等待 SDK 加载事件:不工作?
- dataframe - 如何使用 spark 数据框获取 csv 文件中双引号中的所有记录?
- spring-boot - Spring boot Neo4j - 查询深度无法正常工作
- ffmpeg - Combine multiple videos with specific duration
- node.js - 从 Firebase 迁移
- python-3.x - 用正整数Python在数组中找到最右边的更大元素
- entity-framework - 我如何在迁移中获取连接字符串