Pandas:如何删除代表不适用的非空0值(无法使用dropna()场景)
针对0为不适用值的数据集删除操作方案
默认基于Python pandas库实现,提供两种常用处理思路:
方案1:将0转换为NaN后复用dropna逻辑
适合原有逻辑已经基于dropna实现,不想大幅修改代码的场景:
- 全表所有列的0都判定为不适用值时,直接全局替换:
# 把全表0值替换为NaN df = df.replace(0, float('nan')) # 按原有逻辑删除含NaN的行,加subset参数可指定要检查的列范围 df = df.dropna() - 仅指定列的0判定为不适用值时,限定列操作:
# 仅把col1、col2列的0替换为NaN df[['col1', 'col2']] = df[['col1', 'col2']].replace(0, float('nan')) # 仅检查col1、col2列,存在NaN就删除对应行 df = df.dropna(subset=['col1', 'col2'])
方案2:直接按条件过滤行,无需修改原始值
适合不想改动原数据集的数值类型,一步完成过滤的场景:
- 仅删除指定列存在0的行:
# 保留col1、col2列都不为0的行 df = df[(df[['col1', 'col2']] != 0).all(axis=1)] - 删除全表任意列存在0的行:
# 保留所有列都不为0的行 df = df[(df != 0).all(axis=1)]
注意事项
如果数据集里部分列的0属于合法有效值,必须指定操作的列范围,避免误删有效数据。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

