如何在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,}')存在两个核心问题:
str.split(',')返回的是每个元素为列表的Series,count()方法无法直接对列表内的元素做正则匹配统计;- 未处理分割后元素的前后空格,会导致像
" Tom O"这类带空格的元素被误判长度。
边缘案例处理
两种方法都通过str.strip()去除了分割后元素的前后空格,能正确处理以下场景:
- 元素前后带多个空格:比如
", Hello World , test "会被处理为["Hello World", "test"] - 空元素:比如
",,,abc"会被处理为["abc"],不会统计空字符串
内容的提问来源于stack exchange,提问作者LonelySoul
相关产品推荐
相关产品推荐

