
本文介绍如何基于条件(如某列值等于特定字符串)对pandas dataframe进行行过滤,并可选地删除指定列,从而生成新的dataframe。
本文介绍如何基于条件(如某列值等于特定字符串)对pandas dataframe进行行过滤,并可选地删除指定列,从而生成新的dataframe。
在数据分析中,经常需要从原始数据集中提取满足特定条件的子集。以Pandas为例,最常用且高效的方式是布尔索引(Boolean Indexing)。例如,若需从 df1 中筛选出 "purpose" 列值为 "house" 的所有行,并将结果保存为新DataFrame df2,同时移除 "purpose" 列(因该列已作为筛选依据,后续分析可能不再需要),可使用如下一行代码:
df2 = df1[df1["purpose"] == "house"].drop("purpose", axis=1)✅ 代码说明:
- df1["purpose"] == "house" 生成一个布尔Series,长度与 df1 行数一致,对应位置为 True 表示该行 "purpose" 值为 "house";
- df1[...] 利用该布尔Series进行行筛选,返回符合条件的子DataFrame;
- .drop("purpose", axis=1) 沿列方向(axis=1)删除 "purpose" 列,得到精简后的 df2。
⚠️ 注意事项:
- 若 "purpose" 列存在缺失值(NaN),== "house" 会返回 False(而非 NaN),因此含 NaN 的行默认被排除;如需显式保留/处理缺失值,应使用 pd.isna() 或 fillna() 配合逻辑运算;
- 列名需严格匹配(区分大小写),建议先用 df1.columns.tolist() 确认列名拼写;
- 若仅需筛选不删列,直接写 df2 = df1[df1["purpose"] == "house"] 即可;
- 对于多条件筛选(如 "purpose" == "house" 且 "loan_amnt" > 10000),可用 &(注意括号包裹每个条件):
df2 = df1[(df1["purpose"] == "house") & (df1["loan_amnt"] > 10000)].drop("purpose", axis=1)
掌握布尔索引是Pandas数据清洗与子集构建的核心技能,简洁、可读性强,且性能优异——推荐优先使用,避免 query() 或 loc 等等效但稍重的方法,除非表达式复杂或需动态变量注入。


















