我使用以下代碼復制了 Pandas 系列:
data = np.array([1, 2, 3, 4, 5, np.nan, np.nan, np.nan, 9,10,11,12,13,14])
ser = pd.Series(data)
print(ser)
我想只選擇 NaN 值之前的列,這樣我只能得到值 1、2、3、4、5。我該怎么做?
uj5u.com熱心網友回復:
在第一次匹配和最后一次反轉掩碼后使用重復s測驗缺失值Series.isna,過濾:Series.cummaxTrue~boolean indexing
a = ser[~ser.isna().cummax()]
print(a)
0 1.0
1 2.0
2 3.0
3 4.0
4 5.0
dtype: float64
累積和的替代解決方案:
a = ser[ser.isna().cumsum().eq(0)]
print(a)
0 1.0
1 2.0
2 3.0
3 4.0
4 5.0
dtype: float64
詳情:
print(ser.to_frame().assign(testna = ser.isna(),
cummax = ser.isna().cumsum(),
invert = ser.isna().cumsum().eq(0)))
0 testna cummax invert
0 1.0 False 0 True
1 2.0 False 0 True
2 3.0 False 0 True
3 4.0 False 0 True
4 5.0 False 0 True
5 NaN True 1 False
6 NaN True 2 False
7 NaN True 3 False
8 9.0 False 3 False
9 10.0 False 3 False
10 11.0 False 3 False
11 12.0 False 3 False
12 13.0 False 3 False
13 14.0 False 3 False
print(ser.to_frame().assign(testna = ser.isna(),
cummax = ser.isna().cummax(),
test0 = ~ser.isna().cummax()))
0 testna cummax test0
0 1.0 False False True
1 2.0 False False True
2 3.0 False False True
3 4.0 False False True
4 5.0 False False True
5 NaN True True False
6 NaN True True False
7 NaN True True False
8 9.0 False True False
9 10.0 False True False
10 11.0 False True False
11 12.0 False True False
12 13.0 False True False
13 14.0 False True False
uj5u.com熱心網友回復:
使用布爾掩碼對系列進行切片。
您有兩個選擇,檢查值不是 NA with并在第一個with
之后notna擴展False值。TrueSeries.cummin
ser[ser.notna().cummin()]
輸出:
0 1.0
1 2.0
2 3.0
3 4.0
4 5.0
dtype: float64
或者,使用 測驗值是否為 NA isna,然后使用 擴展第一個True值之后的值True,Series.cummax然后使用 反轉掩碼~:
ser[~ser.isna().cummax()]
它如何作業的視覺表示:
data notna notna cummin isna isna cummax ~(isna cummax)
0 1.0 True True False False True
1 2.0 True True False False True
2 3.0 True True False False True
3 4.0 True True False False True
4 5.0 True True False False True
5 NaN False False True True False
6 NaN False False True True False
7 NaN False False True True False
8 9.0 True False False True False
9 10.0 True False False True False
10 11.0 True False False True False
11 12.0 True False False True False
12 13.0 True False False True False
13 14.0 True False False True False
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/425815.html
