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

Pandas:移除DataFrame列中不含指定子串的单元格内的字符

解决DataFrame列中移除不含指定子串单元格的特定字符问题

问题核心

需要对DataFrame的start列做如下处理:单元格内容不含"BC"时,移除其中的"-";含"BC"的单元格保持原样。

错误原因分析

你尝试用~'BC'来表示"不含BC"的逻辑是错误的:~是Python的位运算符,只能作用于数值或布尔数组,直接作用于字符串会触发TypeError。正确的做法是先通过str.contains()生成布尔数组,再用~对数组取反。

正确实现代码

import numpy as np
import pandas as pd

# 构造示例DataFrame
slate = pd.DataFrame({
    'name': ['La Coma'],
    'municipality': ['Altafulla'],
    'start': ['-200 AD'],
    'end': ['125 AD'],
    'ext': [1.74],
    'x': [1.379991],
    'y': [41.154995]
})

# 核心处理逻辑
slate['start'] = np.where(
    # 取反:筛选出不含"BC"的单元格
    ~slate['start'].str.contains('BC', na=False),
    # 对符合条件的单元格移除"-"
    slate['start'].str.replace('-', '', regex=False),
    # 含"BC"的单元格保持原内容
    slate['start']
)

代码说明

  1. slate['start'].str.contains('BC', na=False):生成布尔数组,标记每个单元格是否包含"BC",na=False确保空值被判定为False
  2. ~:对上述布尔数组取反,得到"不含BC"的单元格标记
  3. np.where():根据标记执行分支逻辑,符合条件的单元格替换"-",否则保留原内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:06:32