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

Streamlit中DataFrame过滤媒体消息返回0,Jupyter中正常

解决Streamlit中WhatsApp媒体消息统计返回0的问题

可能的原因及对应解决方法

  • 换行符不一致导致匹配失败
    Jupyter和Streamlit加载的聊天文件可能存在换行符差异(比如Windows系统的\r\n和Unix系统的\n),你原代码里硬编码了带\n的匹配字符串,若数据里实际是\r\n结尾,就会匹配失效。

    解决方法:放弃精确匹配带换行的字符串,改用更稳妥的方式:

    # 去除字符串两端所有空白(包括换行、空格、制表符)后匹配
    no_of_media = df[df['message'].str.strip() == '<Media omitted>'].shape[0]
    
    # 或者直接用包含匹配(仅当消息中只有该标记时适用)
    no_of_media = df[df['message'].str.contains('<Media omitted>')].shape[0]
    
  • 存在隐藏空白或编码差异
    导出的WhatsApp聊天记录里,<Media omitted>前后可能存在看不见的空白字符(比如全角空格),或者读取文件时的编码细微差异导致字符串不匹配。

    解决方法:在Streamlit中添加调试代码,查看疑似媒体消息的原始字符细节:

    st.write("调试:前10条消息的原始内容与字符编码")
    for idx, msg in enumerate(df['message'].head(10)):
        st.write(f"{idx}: 内容='{msg}' | 长度={len(msg)} | 字符ASCII码={[ord(c) for c in msg]}")
    

    通过ASCII码可以快速定位是否有额外字符(比如\r对应ASCII码13),再针对性处理。

  • 数据类型异常
    若Streamlit加载数据时,message列被识别成非字符串类型(比如object类型但实际包含非字符串值),会导致字符串匹配逻辑失效。

    解决方法:强制转换为字符串类型后再执行统计:

    df['message'] = df['message'].astype(str)
    no_of_media = df[df['message'].str.strip() == '<Media omitted>'].shape[0]
    

额外调试技巧

在Streamlit中直接展示匹配到的行,确认是否真的没有符合条件的数据:

st.write("匹配到的媒体消息:")
st.dataframe(df[df['message'].str.contains('<Media omitted>')])

如果这里能显示数据,说明统计逻辑没问题,可能是后续展示环节的问题;如果仍为空,就回到前面的步骤排查字符串差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:52:17