如何用Pandas筛选含指定字符串的行?处理空值报错问题
解决Pandas筛选含指定词汇行的空值/类型报错问题
方法1:统一转换为字符串后处理
先把所有列转成字符串类型,空值(NaN)会被转为字符串'NaN',避免类型不匹配报错:
df[df.astype(str).apply(' '.join, axis=1).str.contains('|'.join(word_list))]
方法2:逐列检查再合并结果
不拼接整行内容,直接对每列单独检查匹配情况,再判断每行是否存在符合条件的列,这种方式更高效,空值会自动返回False不影响判断:
# 生成每列的匹配布尔序列,再取每行是否有至少一个匹配 mask = df.apply(lambda col: col.astype(str).str.contains('|'.join(word_list)), axis=0) result_df = df[mask.any(axis=1)]
方法3:拼接时单独转换元素类型
如果不想全列转字符串,可在拼接每行内容时,把每个元素单独转为字符串:
df[df.apply(lambda row: ' '.join(str(x) for x in row), axis=1).str.contains('|'.join(word_list))]
额外提示
词列表中的特殊字符(比如/)属于正则表达式特殊符号,若需要精确匹配,建议用re.escape()处理每个词汇,避免正则语法干扰:
import re pattern = '|'.join(re.escape(word) for word in word_list) # 将上述方法中的'|'.join(word_list)替换为pattern即可
内容的提问来源于stack exchange,提问作者Stanleyrr
相关产品推荐
相关产品推荐

