如何在Pandas中按位置过滤长度可变的字符串?
解决Pandas字符串过滤兼容2/3字符的问题
我来帮你搞定这个问题!你遇到的报错是因为当所有字符串都是2个字符时,df.col_name.str[2]会返回NaN(浮点类型),和字符串'W'做比较就会触发类型不匹配的错误。这里有几个完美兼容两种场景的解决方案:
方案1:先筛选长度≥3的行再判断
这个思路最直观,先把长度不够3的行排除掉,剩下的行再检查第三个字符:
df[(df.col_name.str.len() >= 3) & (df.col_name.str[2] == 'W')]
不管列里有没有2字符的字符串,都不会出现NaN和字符串比较的情况,完全避免类型错误。
方案2:使用str.get()配合fillna()
str.get()方法在索引超出字符串长度时会返回NaN,我们可以把这些NaN转换成布尔值False,就不会报错了:
df[df.col_name.str.get(2).eq('W').fillna(False)]
str.get(2):获取每个字符串的第3个字符(索引从0开始),2字符的字符串会返回NaNeq('W'):判断是否等于'W',NaN会保持NaNfillna(False):把所有NaN替换成False,最终只有第三个字符是'W'的行会被保留
方案3:用正则表达式精准匹配
正则表达式可以直接描述我们要找的字符串模式——长度至少3,且第三个字符是'W':
df[df.col_name.str.contains(r'^..W')]
这里的正则^..W表示:
^:匹配字符串开头..:匹配任意两个字符W:匹配第三个字符为'W'
这个方法最简洁,自动忽略所有2字符的字符串,不会触发错误。
内容的提问来源于stack exchange,提问作者user1742188
相关产品推荐
相关产品推荐

