You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅在Jupyter中使用Pandas过滤DataFrame返回空结果的问题

问题描述

我通过以下代码获取了一个DataFrame:

file_path = os.path.join(dataset_path, 'movie_conversations.txt')
movie_conversations = pd.read_csv(file_path, sep=r"\+\+\+\$\+\+\+", encoding='cp1251', engine='python', names=['characterID_1', 'characterID_2', 'movieID', 'list_of_the_utterances'])
movie_conversations.head()

该代码返回的DataFrame显示正常:

characterID_1characterID_2movieIDlist_of_the_utterances
u0u2m0['L194', 'L195', 'L196', 'L197']
u0u2m0['L198', 'L199']
u0u2m0['L200', 'L201', 'L202', 'L203']

但当我执行如下过滤操作时,返回的是空DataFrame:

movie_conversations[movie_conversations.movieID == "m0"]

此外,执行movie_conversations.movieID == "m0"时,该列所有值的匹配结果均为False:

0        False
1        False
2        False
3        False
4        False
         ...  
83092    False
83093    False
83094    False
83095    False
83096    False
Name: movieID, Length: 83097, dtype: bool

该问题仅出现在JupyterLab/Notebook中,在PyCharm/DataSpell中运行则一切正常。

解决办法
  • 清理隐藏空白字符:Jupyter和PyCharm对字符串的显示逻辑不同,看似是m0的单元格可能包含空格、制表符等隐藏字符。先检查字符串长度确认:

    movie_conversations['movieID'].apply(len)
    

    如果长度大于2,说明存在多余字符,用str.strip()清理列数据:

    movie_conversations['movieID'] = movie_conversations['movieID'].str.strip()
    

    之后再执行过滤操作即可。

  • 读取时直接处理数据:可以在pd.read_csv阶段就指定转换器清理movieID列,避免后续问题:

    movie_conversations = pd.read_csv(
        file_path, 
        sep=r"\+\+\+\$\+\+\+", 
        encoding='cp1251', 
        engine='python', 
        names=['characterID_1', 'characterID_2', 'movieID', 'list_of_the_utterances'],
        converters={'movieID': lambda x: x.strip()}
    )
    
  • 重启Jupyter内核:Jupyter可能存在变量缓存问题,导致新修改不生效。重启内核后重新运行所有代码,排除旧数据干扰。

内容的提问来源于stack exchange,提问作者VladislavFrolov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 03:10:45