去掉熊猫中的前导NaN

时间:2015-07-17 07:37:38

标签: python numpy pandas

如何删除pandas中的主要NaN?

pd.Series([np.nan, np.nan, np.nan, 1, 2, np.nan, 3])

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

pd.Series([1, 2, np.nan, 3])

4 个答案:

答案 0 :(得分:4)

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

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

因此,我们使用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

答案 1 :(得分:2)

查找第一个非纳米指数

查找第一个非纳米项的索引

s = pd.Series([np.nan, np.nan, np.nan, 1, 2, np.nan, 3])

nans = s.apply(np.isnan)

first_non_nan = nans[nans == False].index[0] # get the first one

<强>输出

s[first_non_nan:]
Out[44]:
3     1
4     2
5   NaN
6     3
dtype: float64

答案 2 :(得分:1)

这里可以建议另外两种方法,假设- (void)windowBecameHidden:(NSNotification *)notification { UIWindow *window = notification.object; if (window != self.window) { NSLog(@"Online video on full screen."); } } 为输入系列。

方法#1:切片 -

A

方法#2:使用屏蔽 -

A[np.where(~np.isnan(A))[0][0]:] 

示例运行 -

A[np.maximum.accumulate(~np.isnan(A))]

答案 3 :(得分:0)

删除前导np.nan

tab = [np.nan, np.nan, np.nan, 1, 2, np.nan, 3]
pd.Series(tab[tab.index([n for n in tab if np.isnan(n)].pop(0)):])