[Zaktualizowano w celu dostosowania do nowoczesnego pandas
, który ma isnull
jako metodę DataFrame
s ..]
Możesz użyć isnull
i any
zbudować boolean Series i użyć tego do indeksowania w ramce:
>>> df = pd.DataFrame([range(3), [0, np.NaN, 0], [0, 0, np.NaN], range(3), range(3)])
>>> df.isnull()
0 1 2
0 False False False
1 False True False
2 False False True
3 False False False
4 False False False
>>> df.isnull().any(axis=1)
0 False
1 True
2 True
3 False
4 False
dtype: bool
>>> df[df.isnull().any(axis=1)]
0 1 2
1 0 NaN 0
2 0 0 NaN
[Dla starszych pandas
:]
Możesz użyć funkcji isnull
zamiast metody:
In [56]: df = pd.DataFrame([range(3), [0, np.NaN, 0], [0, 0, np.NaN], range(3), range(3)])
In [57]: df
Out[57]:
0 1 2
0 0 1 2
1 0 NaN 0
2 0 0 NaN
3 0 1 2
4 0 1 2
In [58]: pd.isnull(df)
Out[58]:
0 1 2
0 False False False
1 False True False
2 False False True
3 False False False
4 False False False
In [59]: pd.isnull(df).any(axis=1)
Out[59]:
0 False
1 True
2 True
3 False
4 False
prowadząc do raczej kompaktowego:
In [60]: df[pd.isnull(df).any(axis=1)]
Out[60]:
0 1 2
1 0 NaN 0
2 0 0 NaN
df[df.isnull().any(axis=1)]
działa, ale rzucaUserWarning: Boolean Series key will be reindexed to match DataFrame index.
. Jak przepisać to w sposób bardziej wyraźny i w taki sposób, aby nie wyzwalał tego komunikatu ostrzegawczego?df.loc[df.isnull().any(axis=1)]
.any()
i.all()
świetnie sprawdzają się w ekstremalnych przypadkach, ale nie wtedy, gdy szukasz określonej liczby wartości null. Oto niezwykle prosty sposób na zrobienie tego, o co wierzę, że pytasz. To dość szczegółowe, ale funkcjonalne.Wynik
Następnie, jeśli jesteś podobny do mnie i chcesz wyczyścić te wiersze, po prostu napisz:
Wynik:
źródło