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

Python:统计匹配词产品数并求均价时结果为Series异常排查

问题分析与解决

你得到空Series的核心原因大概率是过滤后没有匹配到任何产品数据,导致mean()操作返回了空结果。下面我会拆解常见的错误场景,并给出正确的实现方式:

常见错误原因

  • 误用精确匹配而非包含匹配:如果你的代码用了df['Product'].isin(wordlist),这是检查产品名称是否完全等于词表中的某个单词,而非包含单词。比如词表里是"phone",但产品名是"smart phone",isin就会匹配失败,导致过滤后的数据为空。
  • 大小写不匹配:词表中的单词是"Phone",但产品名里是"phone"或"PHONE",字符串匹配默认区分大小写,会直接导致匹配不到。
  • 词表单词带特殊字符/空格:比如词表里的单词是" smart phone"(带前导空格),但产品名里是"smart phone",这种细微差异也会让匹配失效。
  • Product列存在缺失值(NaN):如果Product列有NaN,执行包含检查时会返回NaN,布尔索引会自动排除这些行;如果所有行要么是NaN要么匹配不到,就会得到空DataFrame。

正确实现示例

假设你的DataFrame结构如下:

import pandas as pd

df = pd.DataFrame({
    'Product': ['smart phone', 'wireless headphone', 'laptop', 'gaming phone'],
    'Price': [599, 199, 999, 799]
})
wordlist = ['phone', 'headphone']

步骤1:正确过滤包含词表单词的产品

使用str.contains结合正则表达式实现多单词包含匹配,同时处理大小写和缺失值问题:

# 构建正则表达式,匹配词表中的任意单词,忽略大小写
pattern = '|'.join(wordlist)
filtered_df = df[df['Product'].str.contains(pattern, case=False, na=False)]
  • case=False:忽略大小写匹配,避免大小写差异导致的匹配失败
  • na=False:将Product列的NaN值视为False,避免干扰过滤逻辑

步骤2:统计数量和平均价格

product_count = len(filtered_df)
average_price = filtered_df['Price'].mean()

如果filtered_df不为空,average_price会返回一个标准float数值;如果确实没有匹配到数据,average_price会返回NaN(而非空Series),你可以根据业务需求用fillna(0)或其他方式处理这种情况。

空结果排查方法

如果还是得到空结果,先打印filtered_df确认是否有数据:

print(filtered_df)

若为空,再逐个验证:

  • 打印df['Product'].str.contains(pattern, case=False, na=False)的结果,查看哪些行是True
  • 检查词表中的单词是否确实存在于Product列的字符串中
  • 确认Product列的数据类型是字符串(如果是其他类型,str.contains会报错或返回全False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:51:01