我有大 CSV(~100k 行 x 30 列)。有時,資料具有nan跨越df不同大小的值的部分。我需要洗掉nans 但兩邊還要洗掉~3 個資料點,因為兩邊的非nan資料都被破壞了。
可以洗掉包含 a 的任何行,nan但這會丟棄比需要更多的資料。
我怎么能用python做到這一點?資料已加載到df.
uj5u.com熱心網友回復:
用:
df = pd.DataFrame({'col':['a','b','c', np.nan, 'd','e',np.nan, 's','r'],
'col1':4})
print (df)
col col1
0 a 4
1 b 4
2 c 4
3 NaN 4
4 d 4
5 e 4
6 NaN 4
7 s 4
8 r 4
#test at least one missing value
m = df.isna().any(axis=1)
#test row above and bellow match value by mask, chain by | for bitwise OR
#filter in inverted mask by ~ in boolean indexing
df = df[~(m | m.shift(fill_value=False) | m.shift(-1, fill_value=False))]
print (df)
col col1
0 a 4
1 b 4
8 r 4
替代解決方案:
m = df.notna().all(axis=1)
df = df[(m & m.shift(fill_value=True) & m.shift(-1, fill_value=True))]
uj5u.com熱心網友回復:
如果要查看下方的行數可能會發生變化,這是另一種方式。
l = 1
(df.loc[~df.isna().any(axis=1)
.replace(False,None,method = 'ffill',limit= l)
.replace(False,None,method = 'bfill',limit= l)])
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/352886.html
