我有以下代码
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()]
我原以为只有第二行会返回。你能帮我解决我哪里出错了吗?
df[~df[['name', 'toy']].isna()]
返回一个 DataFrame(2D),因此您将在整个 DataFrame 上应用掩码,保持真实的值(形状保持不变)。
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