Pandas列字符串取0:8切片后检查含指定值及contains报错解决
问题原因
Pandas的contains是字符串专属的处理方法,必须通过.str访问器调用。你对列做切片操作df['COURSE ID'].str[0:8]后得到的是普通的字符串类型Series对象,无法直接调用contains方法。
修复方案
只需要在切片后再次调用.str访问器即可,修改后的代码如下:
def findCourse(url, course): df = pd.read_html(url, flavor="html5lib")[0] return df.loc[df['COURSE ID'].str[0:8].str.contains(course)]
可选优化
- 如果你是要精确匹配切片后的值和给定值完全相等,直接用
==判断性能更高:return df.loc[df['COURSE ID'].str[0:8] == course] - 匹配时需要忽略大小写,可添加
case=False参数:return df.loc[df['COURSE ID'].str[0:8].str.contains(course, case=False)] - 列中存在空值时会触发匹配报错,添加
na=False可将空值默认判定为不匹配:return df.loc[df['COURSE ID'].str[0:8].str.contains(course, na=False)]
内容的提问来源于stack exchange,提问作者jbcallv
相关产品推荐
相关产品推荐

