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'] )
代码说明
slate['start'].str.contains('BC', na=False):生成布尔数组,标记每个单元格是否包含"BC",na=False确保空值被判定为False~:对上述布尔数组取反,得到"不含BC"的单元格标记np.where():根据标记执行分支逻辑,符合条件的单元格替换"-",否则保留原内容
内容的提问来源于stack exchange,提问作者CharlesSwineburne
相关产品推荐
相关产品推荐

