pandas系列如何用最后一个有效值填充na

时间:2016-02-15 17:42:46

标签: python pandas nan

我有一个熊猫系列,我想填补最后一个不是南的值。例如,

a=pd.Series({1: 1918,  2: 1928, 3: np.nan, 4: np.nan, 5: np.nan, 6: 1853, 7: 1831})
Out[113]: 
1    1918
2    1928
3     NaN
4     NaN
5     NaN
6    1853
7    1831
dtype: float64

我想要的是以下内容:

a=pd.Series({1: 1918,
2: 1928,
3: np.nan,
4: np.nan,
5: 1928,
6: 1853,
7: 1831})

有优雅的方法吗?我试着看看fillna,但它没有我想要的这个选项。它将用1928填充值3或用1853填充值5(使用limit = 1),但这不是我要找的。最终目标是根据此数据执行返回系列,当值为nan时,使用最后一个非nan的可用数据。所以一个新的回归系列应该给出现货6,1853 /1928 -1。

1 个答案:

答案 0 :(得分:1)

您可以按isnullshift创建模板,然后使用locfillna

import pandas as pd
import numpy as np

a=pd.Series({1: 1918,  2: 1928, 3: np.nan, 4: np.nan, 5: np.nan, 6: 1853, 7: 1831})
print a
1    1918
2    1928
3     NaN
4     NaN
5     NaN
6    1853
7    1831
dtype: float64

print ~(pd.isnull(a) & pd.isnull(a.shift(-1)))
1     True
2     True
3    False
4    False
5     True
6     True
7     True
dtype: bool

a.loc[ ~(pd.isnull(a) & pd.isnull(a.shift(-1)))] = a.fillna(method='ffill')
print a
1    1918
2    1928
3     NaN
4     NaN
5    1928
6    1853
7    1831
dtype: float64