我打算发表评论,但我想我会写一个答案,因为它开始变得相当复杂。
从以下数据框开始:
import pandas as pd
import numpy as np
df = pd.DataFrame([['a', 'b', np.nan], [np.nan, 'c', 'c'], ['c', 'd', 'a']],
columns=['col1', 'col2', 'col3'])
df
col1 col2 col3
0 a b NaN
1 NaN c c
2 c d a
假设我们希望在col2 和col3 列中保留 带有Nans 的行,一种方法如下:这是基于this post 的答案 p>
df.loc[pd.isnull(df[['col2', 'col3']]).any(axis=1)]
col1 col2 col3
0 a b NaN
因此,如果我们在感兴趣的列中删除带有 Nans 的行,这将给我们提供将被删除的行。为了保留列,我们可以运行相同的代码,但使用 ~ 来反转选择
df.loc[~pd.isnull(df[['col2', 'col3']]).any(axis=1)]
col1 col2 col3
1 NaN c c
2 c d a
这相当于:
df.dropna(subset=['col2', 'col3'])
我们可以测试:
df.dropna(subset=['col2', 'col3']).equals(df.loc[~pd.isnull(df[['col2', 'col3']]).any(axis=1)])
True
您当然可以在自己的较大数据帧上对此进行测试,但应该得到相同的答案。