You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不指定行列的情况下移除DataFrame中的特定值?以及删除含指定值整行的方法

解决Pandas中处理"?"值的两种常见需求

没问题,这两个需求在数据预处理里非常常见,我给你一步步讲清楚怎么操作:

1. 删除所有包含"?"的整行

不需要知道具体哪一列有"?",可以直接用布尔索引快速筛选出没有任何"?"的行:

import pandas as pd

# 假设你的DataFrame叫df
df = df[~df.isin(["?"]).any(axis=1)]

解释一下这段代码:

  • df.isin(["?"]) 会生成一个和原DataFrame形状相同的布尔矩阵,每个单元格如果等于"?"就返回True,否则False
  • .any(axis=1) 检查每一行是否存在至少一个True(也就是该行包含"?")
  • 前面的~是取反操作,最终保留的是没有任何"?"的行

如果之后你想批量处理多种异常值(比如同时处理"?"、"NA"、"缺失"),只要把这些值放进列表里就行:

df = df[~df.isin(["?", "NA", "缺失"]).any(axis=1)]

2. 全DataFrame移除特定字符串值

这里的"移除"通常有两种常见场景,根据你的需求选择:

场景一:把所有"?"替换成指定值(比如缺失值、0、空字符串)

不用指定列,直接对整个DataFrame做全局替换:

# 替换成缺失值(推荐,方便后续用pandas的缺失值处理工具)
df.replace("?", pd.NA, inplace=True)

# 或者替换成0(和你之前的操作逻辑一致,这里无需指定列也能全局生效)
df.replace("?", 0, inplace=True)

# 或者替换成空字符串
df.replace("?", "", inplace=True)

场景二:转为缺失值后按需删除行/列

如果替换成缺失值后,你想进一步删除有缺失值的行或列,可以搭配dropna使用:

# 删除所有包含缺失值的行
df = df.replace("?", pd.NA).dropna(axis=0)

# 如果只想删除所有值都是"?"的行,添加how="all"参数
df = df.replace("?", pd.NA).dropna(axis=0, how="all")

内容的提问来源于stack exchange,提问作者Mohamed_Fergany

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 18:27:49