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

Python DataFrame统计指定单词出现次数:现有代码优化及视图/副本警告问题解决

解决方法:优化代码并消除警告

1. 先搞定警告问题

你碰到的警告,根源是用了链式索引(df['has_restaurants'][index])——这种写法让pandas没法确定你操作的是原DataFrame的视图还是副本,修改时容易出现不可预期的行为。

要消除警告,只需要把赋值语句改成用.loc做明确的行+列索引:

df.loc[index, 'has_restaurants'] = sum(map(lambda count : 1 if 'restaurant' in count else 0, text))

这样pandas能清晰识别你要修改原DataFrame的指定位置,警告自然就消失了。

2. 更优雅高效的实现(替代手动循环)

pandas的核心优势就是矢量化操作,完全没必要手动遍历每一行。这里有两种更简洁的写法,处理大数据集时速度比循环快得多:

方法一:用apply结合生成器表达式

这个写法和你原代码的逻辑完全一致,但更简洁清爽:

df['has_restaurants'] = df['Description'].apply(
    lambda x: sum(1 for word in x.split() if 'restaurant' in word)
)

它会自动对每个Description字符串拆分单词,然后统计包含"restaurant"的单词数量。

方法二:正则表达式匹配(更灵活)

如果你想严格匹配相关单词(比如不想把"restaurantxyz"这类无关词算进去),可以用str.findall结合正则:

# 匹配所有包含"restaurant"的完整单词
df['has_restaurants'] = df['Description'].str.findall(r'\w*restaurant\w*').str.len()

正则\w*restaurant\w*会匹配任何以字母数字开头/结尾、中间包含"restaurant"的单词,.str.len()则会统计每个字符串中匹配到的单词总数。

为什么这些写法更好?

  • 没有冗余的手动循环,代码更简洁易读;
  • 利用pandas内部优化,处理大DataFrame时速度远快于手动遍历;
  • 从根源避免了链式索引的问题,不会触发警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 22:54:06