[Обновлено для адаптации к современному pandas
, который имеет isnull
в качестве методаDataFrame
с ..]
Вы можете использовать isnull
и any
для построения логической серии и использовать ее для индексации в вашем фрейме:
>>> 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
[Для пожилых pandas
:]
Вы можете использовать функцию isnull
вместо метода:
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
приводя к довольно компактному:
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)]
работает но кидаетUserWarning: Boolean Series key will be reindexed to match DataFrame index.
. Как можно переписать это более явно и таким образом, чтобы это предупреждение не вызывалось?df.loc[df.isnull().any(axis=1)]
.any()
и.all()
отлично подходят для крайних случаев, но не когда вы ищете определенное количество нулевых значений. Вот очень простой способ сделать то, что, как я полагаю, вы спрашиваете. Это довольно многословно, но функционально.Вывод
Затем, если вы похожи на меня и хотите очистить эти строки, просто напишите:
Вывод:
источник