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

如何在Pandas中统计列内长度≥5的字符串数量

解决方案:统计DataFrame列中逗号分隔的长字符串数量

方法一:使用apply自定义函数处理

这种方法逻辑直观,适合处理带清洗需求的字符串统计场景:

import pandas as pd

# 初始化示例数据
df = pd.DataFrame(columns=['first'])
df['first'] = ['Jack Ryan, Tom O','Stack Over Flow, StackOverFlow','Jurassic Park, IT', 'GOT']

def count_long_strings(s):
    # 分割字符串后,去除每个元素前后的空格
    parts = [part.strip() for part in s.split(',')]
    # 统计长度≥5的元素数量
    return sum(1 for part in parts if len(part) >= 5)

# 新增统计列
df['countStrings'] = df['first'].apply(count_long_strings)

方法二:使用Pandas字符串方法链(更简洁)

利用Pandas内置的向量化字符串方法,实现高效处理:

df['countStrings'] = (df['first']
                      .str.split(',', expand=True)  # 将逗号分隔内容拆分为多列
                      .apply(lambda x: x.str.strip().str.len() >= 5, axis=1)  # 逐行判断元素是否符合长度要求
                      .sum(axis=1))  # 对每行的布尔结果求和,得到符合条件的数量

验证结果

运行代码后,df的输出如下:

first  countStrings
0        Jack Ryan, Tom O             1
1  Stack Over Flow, StackOverFlow             2
2       Jurassic Park, IT             1
3                      GOT             0

原代码错误分析

你之前的代码df['first'].str.split(',').count(r'[a-zA-Z0-9]{5,}')存在两个核心问题:

  1. str.split(',')返回的是每个元素为列表的Series,count()方法无法直接对列表内的元素做正则匹配统计;
  2. 未处理分割后元素的前后空格,会导致像" Tom O"这类带空格的元素被误判长度。

边缘案例处理

两种方法都通过str.strip()去除了分割后元素的前后空格,能正确处理以下场景:

  • 元素前后带多个空格:比如", Hello World , test "会被处理为["Hello World", "test"]
  • 空元素:比如",,,abc"会被处理为["abc"],不会统计空字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 04:02:19