如何删除pandas中的主要NaN?
pd.Series([np.nan, np.nan, np.nan, 1, 2, np.nan, 3])
我想从上面只移除前3个NaN,所以结果应该是:
pd.Series([1, 2, np.nan, 3])
答案 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)):])