为何使用Pandas的dropna()函数无法删除NaN值?
问题:调用
df.dropna(axis=1,inplace=True)无法删除DataFrame中的NaN值 问题描述
通过字典创建Pandas DataFrame后,执行以下代码尝试删除含NaN值的列,但NaN仍未被移除:
df=pd.DataFrame(dic) df.dropna(axis=1,inplace=True) df.head()
从输出可见,DataFrame中仍存在包含NaN值的列(例如stalk-root列)。
原因分析
dropna()方法默认参数为how='all',当指定axis=1时,只有整列所有值都是NaN的列才会被删除。而你的DataFrame中,那些包含NaN的列同时存在非NaN值,所以默认逻辑不会对这些列进行删除操作。
解决方法
根据需求选择以下修改方式:
删除任何包含NaN值的列
修改dropna的how参数为'any',只要列中有至少一个NaN就删除:df=pd.DataFrame(dic) # 包含任何NaN的列都删除 df.dropna(axis=1, how='any', inplace=True) df.head()保留至少有N个非NaN值的列
若要灵活控制,使用thresh参数指定列中非NaN值的最小数量,例如保留至少有100个非NaN值的列:df=pd.DataFrame(dic) # 仅保留非NaN值数量≥100的列 df.dropna(axis=1, thresh=100, inplace=True) df.head()先查看各列缺失值情况
可先执行以下代码统计每列的NaN数量,清晰了解数据缺失情况:print(df.isna().sum())
内容的提问来源于stack exchange,提问作者Dharm paaji
相关产品推荐
相关产品推荐

