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

如何在Python的DataFrame中按条件清除单列单元格内容而非删整行

Pandas中清空包含指定字符的单元格内容

问题描述

给定如下DataFrame,需要将var1列中包含字母Z的单元格内容清空,但保留整行数据:

import pandas as pd

df = pd.DataFrame({"var1": ["AZZBBAA", "CCDDDED", "DZZZZFD", "CDEEEEFG"],
                  "var2": [1,2,4,5]})

期望输出:

var1  var2
0          1
1  CCDDDED    2
2          4
3  CDEEEEFG   5

解决方案

方法1:.loc条件赋值(最直观)

通过布尔索引定位符合条件的行,直接将对应单元格设为空字符串:

# 定位var1列中包含'Z'的行,将var1单元格置空
df.loc[df['var1'].str.contains('Z'), 'var1'] = ''

原理:

  • df['var1'].str.contains('Z') 返回一个布尔Series,标记每个单元格是否包含Z
  • .loc[布尔条件, 列名] 精准定位需要修改的单元格,赋值为空字符串即可

方法2:使用str.replace结合正则(满足你最初的思路)

如果你想用str.replace实现,可以通过正则匹配整个包含Z的字符串,替换为空:

# 正则匹配任意包含Z的字符串,替换为空
df['var1'] = df['var1'].str.replace(r'.*Z.*', '', regex=True)

注意:

  • Pandas 2.0及以上版本默认关闭正则匹配,所以必须显式设置regex=True
  • 正则.*Z.*表示匹配任意包含Z的完整字符串(.*匹配任意字符任意次数)

方法3:mask函数(Pandas风格的简洁写法)

利用mask函数,当条件为真时替换目标值:

# 当var1包含Z时,替换为空字符串,否则保留原值
df['var1'] = df['var1'].mask(df['var1'].str.contains('Z'), '')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:40:36