使用熊猫对数据框系列中的空值进行插值

时间:2019-12-04 07:56:59

标签: python pandas interpolation

我有一个编号列表,已将其分配为数据框序列,如下所示。

 [0.0,
 4.98,
 10.68,
 17.12,
 23.56,
 23.56,
 23.56,
 23.56,
 50.82,
 50.82,
 50.82,
 50.82,
 50.82,
 50.82,
 50.82,
 50.82,
 50.82,
 50.82,
 117.84,
 117.84,
 117.84,
 117.84,
 117.84,
 117.84,
 117.84,
 159.9,
 159.9,
 171.79,
 171.79,
 171.79,
 190.28,
 190.28,
 204.07,
 210.31,
 215.97,
 222.58]

我希望删除所有重复项,并根据列表中不是重复项的现有数字对缺失的NaN值进行插值。

drop_duplicates之后,这就是我所得到的。

0
0.00 

1
4.98 

2
10.68 

3
17.12 

4
23.56 

8
50.82 

18
117.84 

25
159.90 

27
171.79 

30
190.28 

32
204.07 

33
210.31 

34
215.97 

35
222.58 

我继续使用df.interpolate(method='linear'),但是我得到了原来的数字列表,并且没有对缺失的值进行插值。有什么想法可以帮助您吗?我的代码示例如下:

 dlist = [...]
 df = pd.DataFrame(dlist)
 df.drop_duplicates()
 df.interpolate(method='linear')

非常感谢。

1 个答案:

答案 0 :(得分:2)

尝试一下:

a = pd.Series(yourlist)
a[a.duplicated()]  = None
a = a.interpolate(method='linear')

另一种解决方案:

Series.duplicatedSeries.mask将重复值替换为缺失值,并使用Series.interpolate

s = pd.Series(dlist)
s = s.mask(s.duplicated()).interpolate(method='linear')

print (s.head(10))
0     0.000
1     4.980
2    10.680
3    17.120
4    23.560
5    30.375
6    37.190
7    44.005
8    50.820
9    57.522
dtype: float64