删除数据框中选定列具有 na 值的行

问题描述 投票:0回答:1

我有以下代码

df = pd.DataFrame(dict(age=[5, 6, np.nan],
                 born=[pd.NaT, pd.Timestamp('1939-05-27'),
                        pd.Timestamp('1940-04-25')],
                 name=['Alfred', 'Batman', np.nan],
                  toy=[np.nan, 'Batmobile', 'Joker']))

现在我想删除列

name and toy
具有 nan 值的行。我尝试使用下面的代码

df[~df[['name', 'toy']].isna()]

我原以为只有第二行会返回。你能帮我解决我哪里出错了吗?

python-3.x pandas
1个回答
0
投票

df[~df[['name', 'toy']].isna()]
返回一个 DataFrame(2D),因此您将在整个 DataFrame 上应用掩码,保持真实的值(形状保持不变)。

你想要做的是布尔索引,你必须传递一个Series(从而与

all
聚合):

out = df[~df[['name', 'toy']].isna().all(axis=1)]

请注意,这相当于使用

notna
+
any
而不使用
~
:

out = df[df[['name', 'toy']].notna().any(axis=1)]

输出:

   age       born    name        toy
0  5.0        NaT  Alfred       None
1  6.0 1939-05-27  Batman  Batmobile
2  NaN 1940-04-25              Joker
© www.soinside.com 2019 - 2024. All rights reserved.