Python中检测DataFrame文本列是否含问号并返回布尔值
解决方法:检查文本列是否包含问号并生成新列
别担心,我来帮你搞定这个需求!要实现逐行检查DataFrame文本列中是否存在问号,并将结果存入新列,用Pandas的矢量化字符串操作最高效,具体步骤如下:
核心代码实现
假设你的DataFrame名为df,需要检查的文本列名为text_column,可以直接用str.contains()方法:
import pandas as pd # 关键代码:生成新列存储检查结果 df['has_question_mark'] = df['text_column'].str.contains('\?', na=False)
代码解释
str.contains('\?'):这里用正则表达式匹配问号,因为?在正则中是特殊字符(表示匹配前面的字符0次或1次),所以必须用反斜杠\转义,确保匹配的是字面意义上的问号。na=False:处理文本列中的缺失值(NaN/None),将这类行的结果统一设为False,如果你的需求是把缺失值标记为True,可以改成na=True。
示例演示
我们用一个示例DataFrame来验证效果:
# 创建示例数据 data = {'text_column': ['你今天吃饭了吗?', '周末打算去爬山', '这个问题怎么解决?', None, '普通陈述句子']} df = pd.DataFrame(data) # 添加结果列 df['has_question_mark'] = df['text_column'].str.contains('\?', na=False) # 查看输出 print(df)
运行后输出如下:
text_column has_question_mark 0 你今天吃饭了吗? True 1 周末打算去爬山 False 2 这个问题怎么解决? True 3 None False 4 普通陈述句子 False
常见问题排查
如果你之前的代码不符合预期,大概率是这两个原因:
- 没有转义问号:直接写
str.contains('?')会触发正则的特殊语法,导致匹配错误; - 未处理缺失值:缺失值会返回
NaN,而不是True/False,需要用na参数指定处理方式。
内容的提问来源于stack exchange,提问作者user9399405
相关产品推荐
相关产品推荐

