调用pandas的interpolate插值后输出与原数据一致是什么原因?
问题原因分析
- 第一,
pd.DataFrame()传参顺序错误:你当前的写法a = pd.DataFrame(x, y)是把x作为表格的数据列,y作为表格的行索引,你要填充的NaN值全在索引里,而interpolate()默认只对数据列的空值做插值,自然不会生效。你本意应该是把y作为数据列,x作为索引或者另一列。 - 第二,
interpolate()默认返回新的DataFrame,不会修改原对象,要么用变量接收返回值,要么加inplace=True参数原地修改。
修正后的代码
import numpy as np import pandas as pd x = np.array([2, 2.5, 3, 3.5, 3.75, 4, 4.5, 4.75, 5, 5.25, 5.5, 6]) y = np.array([5.197, 7.78, 11.14, 15.09, np.nan, 19.245, 23.11, np.nan, 26.25, np.nan, 28.6,30.3]) # 构造DataFrame时调整参数顺序,y作为数据列,x作为索引 a = pd.DataFrame(y, index=x) # 接收interpolate返回的新对象,或者加inplace=True a = a.interpolate() print(a)
运行输出
0 2.00 5.1970 2.50 7.7800 3.00 11.1400 3.50 15.0900 3.75 17.1675 4.00 19.2450 4.50 23.1100 4.75 24.6800 5.00 26.2500 5.25 27.4250 5.50 28.6000 6.00 30.3000
可以看到原来的三个NaN值已经按照默认线性插值的规则填充完成。
内容的提问来源于stack exchange,提问作者Gletcher
相关产品推荐
相关产品推荐

