Pandas 缺失值:用最接近的非 NaN 值填充
Pandas missing values : fill with the closest non NaN value
假设我有一个包含多个连续 NaN 的 pandas 系列。我知道 fillna
有几种方法来填充缺失值(backfill
和 fill forward
),但我想用最接近的非 NaN 值填充它们。这是我所拥有的示例:
s = pd.Series([0, 1, np.nan, np.nan, np.nan, np.nan, 3])
以及我想要的示例:
s = pd.Series([0, 1, 1, 1, 3, 3, 3])
有谁知道我能做到吗?
谢谢!
您可以将 Series.interpolate
与 method='nearest'
一起使用:
In [11]: s = pd.Series([0, 1, np.nan, np.nan, np.nan, np.nan, 3])
In [12]: s.interpolate(method='nearest')
Out[12]:
0 0.0
1 1.0
2 1.0
3 1.0
4 3.0
5 3.0
6 3.0
dtype: float64
In [13]: s = pd.Series([0, 1, np.nan, np.nan, 2, np.nan, np.nan, 3])
In [14]: s.interpolate(method='nearest')
Out[14]:
0 0.0
1 1.0
2 1.0
3 2.0
4 2.0
5 2.0
6 3.0
7 3.0
dtype: float64
假设我有一个包含多个连续 NaN 的 pandas 系列。我知道 fillna
有几种方法来填充缺失值(backfill
和 fill forward
),但我想用最接近的非 NaN 值填充它们。这是我所拥有的示例:
s = pd.Series([0, 1, np.nan, np.nan, np.nan, np.nan, 3])
以及我想要的示例:
s = pd.Series([0, 1, 1, 1, 3, 3, 3])
有谁知道我能做到吗?
谢谢!
您可以将 Series.interpolate
与 method='nearest'
一起使用:
In [11]: s = pd.Series([0, 1, np.nan, np.nan, np.nan, np.nan, 3])
In [12]: s.interpolate(method='nearest')
Out[12]:
0 0.0
1 1.0
2 1.0
3 1.0
4 3.0
5 3.0
6 3.0
dtype: float64
In [13]: s = pd.Series([0, 1, np.nan, np.nan, 2, np.nan, np.nan, 3])
In [14]: s.interpolate(method='nearest')
Out[14]:
0 0.0
1 1.0
2 1.0
3 2.0
4 2.0
5 2.0
6 3.0
7 3.0
dtype: float64