如何使用pandas统计列中含特定字符串'?'的行数并解决相关报错
问题解决方法
报错根因
你的目标列虽然 dtype 标记为 object/string,但列中混合了原生数值(int、float等)和字符串类型的元素,.str 访问器仅支持全为字符串类型的列调用,因此触发报错。
解决方案
方案1:全值匹配统计(最高效、最适配你的需求)
你需要统计的是**取值完全等于?**的行数,不需要用到模糊匹配,直接做等值判断即可,完全避开.str访问器的限制:
question_mark_count = (df['column'] == '?').sum()
方案2:强制转字符串后模糊匹配(适用于需要匹配所有包含?的行的场景)
如果你确实需要统计所有值中包含?的行数,可以先强制把列中所有元素转为字符串后再调用.str方法:
# astype(str) 可将所有类型的元素统一转为字符串格式 # na=False 表示将空值的匹配结果设为False,避免空值干扰统计结果 question_mark_count = df['column'].astype(str).str.contains('\?', na=False).sum()
如果需要长期使用该列的字符串能力,可以用如下方式完成类型转换,后续调用.str不会再报错:
df["column"] = df["column"].astype(str).astype("string")
内容的提问来源于stack exchange,提问作者jimmy
相关产品推荐
相关产品推荐

