Python 删除列中*不*包含任何NAN的所有行

Python 删除列中*不*包含任何NAN的所有行,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我使用以下命令删除包含一个单元格且值为NAN的行: pos_data = df.iloc[:,[5,6,2]].dropna() 不,我想知道如何保留包含NAN的行,并删除其中一列中不包含NAN的所有其他行。 我的数据是熊猫数据框 谢谢。使用布尔索引,查找行中至少有一个NaN的所有列,并使用掩码进行筛选 df[df.iloc[:, [5, 6, 2]].isna().any(1)] 与此对应的DeMorgan等价物是: df[~df.iloc[:, [5, 6, 2]].notna().al

我使用以下命令删除包含一个单元格且值为NAN的行:

pos_data = df.iloc[:,[5,6,2]].dropna()
不,我想知道如何保留包含NAN的行,并删除其中一列中不包含NAN的所有其他行。 我的数据是熊猫数据框


谢谢。

使用布尔索引,查找行中至少有一个NaN的所有列,并使用掩码进行筛选

df[df.iloc[:, [5, 6, 2]].isna().any(1)]
与此对应的DeMorgan等价物是:

df[~df.iloc[:, [5, 6, 2]].notna().all(1)]

如果我们只考虑列“A”和“C”,那么我们的解决方案将如下

df[['A', 'C']]

     A    C
0    x    z
1    x    z
2  NaN    z
3  NaN  NaN

# Check which cells are NaN
df[['A', 'C']].isna()

       A      C
0  False  False
1  False  False
2   True  False
3   True   True

# Use `any` along the first axis to perform a logical OR across columns
df[['A', 'C']].isna().any(axis=1)

0    False
1    False
2     True
3     True
dtype: bool

# Now, we filter
df[df[['A', 'C']].isna().any(axis=1)]

     A  B    C
2  NaN  y    z
3  NaN  y  NaN
如前所述,与之相反的是使用
notna
+
all(轴=1)


这将删除所有不具有至少1 na值的行:

df[df.isna().any(axis=1)]

可能的重复@hygorxaraujo似乎只针对一列。它将在删除行之前查看所有列,而不仅仅是第5、6和2列(您的答案实际上是我的,但不是那么正确),请告诉我any()、1和~?
df[['A', 'C']].notna().all(1)

0     True
1     True
2    False
3    False
dtype: bool

# You'll notice this is the logical inverse of what we need, 
# so we invert using bitwise NOT `~` operator
~df[['A', 'C']].notna().all(1)

0    False
1    False
2     True
3     True
dtype: bool
df[df.isna().any(axis=1)]