去掉熊猫中的前导NaN

Meh*_*Meh 9 python numpy pandas

如何删除大熊猫中的主要NaN?

pd.Series([np.nan, np.nan, np.nan, 1, 2, np.nan, 3])
Run Code Online (Sandbox Code Playgroud)

我想从上面只删除前3个NaN,所以结果应该是:

pd.Series([1, 2, np.nan, 3])
Run Code Online (Sandbox Code Playgroud)

EdC*_*ica 7

这是仅使用熊猫方法的另一种方法:

In [103]:
s = pd.Series([np.nan, np.nan, np.nan, 1, 2, np.nan, 3])
first_valid = s[s.notnull()].index[0]
s.iloc[first_valid:]

Out[103]:
3     1
4     2
5   NaN
6     3
dtype: float64
Run Code Online (Sandbox Code Playgroud)

因此,我们使用过滤系列notnull以获取第一个有效索引。然后用于iloc切片系列

编辑

正如@ajcr指出的那样,最好使用内置方法,first_valid_index因为这不会返回我在上面的答案中用来掩盖的临时序列:

In [104]:
s = pd.Series([np.nan, np.nan, np.nan, 1, 2, np.nan, 3])
s.iloc[s.first_valid_index():]

Out[104]:
3     1
4     2
5   NaN
6     3
dtype: float64
Run Code Online (Sandbox Code Playgroud)

  • @EdChum:此方法还可以,但是我认为应该鼓励人们使用[`first_valid_index()`](http://pandas.pydata.org/pandas-docs/stable/generation/pandas.Series.first_valid_index.html ),即“ s.iloc [s.first_valid_index():]”。该方法会短路并立即返回所需的索引,而`notnull()`创建一个全新的列,然后需要其他索引操作。这使后一种方法更加慢并且内存效率更低。 (2认同)