如何用loc方法仅删除Name和Age列均为NaN的DataFrame行
解决Pandas中仅删除Name和Age同时为NaN的行的问题
你当前的代码逻辑是保留Name和Age都不为NaN的行,这就导致像第三行这种只有Name为NaN、Age正常的行也被误删了。要实现仅删除「Name和Age同时为NaN」的行,只需要反向筛选——排除掉这两列同时为空的行即可。
用loc实现的正确代码如下:
import pandas as pd import numpy as np data = [['tom', 10, 'male'], ['nick', 15, 'male'], [np.nan, 16, 'male'], [np.nan, np.nan, 'female']] # 新增一组两列同时为NaN的测试数据,方便验证效果 df = pd.DataFrame(data, columns=['Name', 'Age', 'sex']) # 筛选条件:排除Name和Age同时为NaN的行 df_new = df.loc[~((df['Name'].isna()) & (df['Age'].isna()))] print(df_new)
逻辑说明:
df['Name'].isna() & df['Age'].isna():判断每行是否满足Name和Age同时为NaN,返回布尔值数组- 前面加
~表示取反,也就是保留「不满足两列同时为NaN」的所有行 - 用
loc包裹这个条件,就能精准筛选出符合要求的行,不会误删仅单一列为NaN的记录
内容的提问来源于stack exchange,提问作者Zack
相关产品推荐
相关产品推荐

