Python 删除列中*不*包含任何NAN的所有行
我使用以下命令删除包含一个单元格且值为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
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)]