使用Pandas contains()查询DataFrame列文本返回空Series的问题排查
问题原因与解决办法
核心问题出在str.contains()的默认行为上:它默认把传入的字符串当作正则表达式解析,而电影名里的()是正则的特殊元字符(用来表示分组),不是普通字符,所以直接用完整的电影名去匹配时,正则引擎会把括号解析成语法,自然匹配不到原字符串。
给你三种可行的解决方式:
方式一:关闭正则匹配
直接给str.contains()加上regex=False参数,让它按普通字符串做包含匹配:
import pandas as pd df = pd.read_csv("fandango_score_comparison.csv") df.drop_duplicates(subset=["FILM"], inplace=True, ignore_index=True) movie_name = df.FILM.iloc[0] # 添加regex=False,按普通字符串匹配 movie_df = df[df["FILM"].str.contains(movie_name, regex=False)]
方式二:转义正则特殊字符
如果需要保留正则功能(比如模糊匹配),可以用re.escape()把电影名里的特殊字符转义成普通字符:
import pandas as pd import re df = pd.read_csv("fandango_score_comparison.csv") df.drop_duplicates(subset=["FILM"], inplace=True, ignore_index=True) movie_name = df.FILM.iloc[0] # 转义特殊字符后再匹配 movie_df = df[df["FILM"].str.contains(re.escape(movie_name))]
方式三:精确匹配(更高效)
如果你只是要精准定位某一行,直接用==做精确匹配比str.contains()更高效:
import pandas as pd df = pd.read_csv("fandango_score_comparison.csv") df.drop_duplicates(subset=["FILM"], inplace=True, ignore_index=True) movie_name = df.FILM.iloc[0] # 精确匹配电影名 movie_df = df[df["FILM"] == movie_name]
内容的提问来源于stack exchange,提问作者soumeng78
相关产品推荐
相关产品推荐

