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

如何计算Pandas DataFrame列中集合的长度并新增结果列

问题根源

你列里存储的集合本质是单元素集合:每个集合内仅包含1个完整的长字符串,所有你以为的独立字符串,其实都是这个长字符串里被逗号分隔的文本片段,不是集合的独立元素。这也是你直接调用len()统计集合长度永远返回1的核心原因,之前写的自定义函数实际是在统计单个长字符串的字符总数,自然得不到正确结果。

正确实现代码

分两种场景处理:

场景1:列内存储的是Python原生集合对象

直接取出集合内的唯一长字符串,按逗号拆分后统计元素数量即可:

# 新增列存储集合内实际的字符串元素个数
df['x_length'] = df['x'].apply(
    lambda cell: len([item.strip() for item in next(iter(cell)).split(',')])
)

代码逻辑说明:

  • next(iter(cell)):取出单元素集合里唯一的长字符串
  • split(','):按逗号把长字符串拆成独立片段
  • strip():去掉每个片段前后的多余空格
  • len():统计拆分后的有效元素个数

场景2:列内存储的是字符串格式的集合(比如CSV读入后是"{a,b,c}"这类文本)

先把文本格式的集合转成Python原生集合,再执行上述统计逻辑:

import ast
# 先把文本格式的集合转成原生集合对象
df['x'] = df['x'].apply(ast.literal_eval)
# 再统计元素个数
df['x_length'] = df['x'].apply(
    lambda cell: len([item.strip() for item in next(iter(cell)).split(',')])
)
效果验证

用你提供的样例数据测试:

import pandas as pd
# 构造样例数据
df = pd.DataFrame(
    {'x': [{'string1, string2, string3'}, {'string4, string5'}]},
    index=['A', 'B']
)
# 执行统计代码
df['x_length'] = df['x'].apply(
    lambda cell: len([item.strip() for item in next(iter(cell)).split(',')])
)
print(df)

输出完全匹配你的预期:

x  x_length
A  {string1, string2, string3}         3
B                  {string4, string5}         2
之前方法失效的原因
  • df['x'].str.len():该方法用于统计字符串长度,作用在集合对象上时实际返回集合本身的元素数,也就是固定值1
  • df['x'].apply(lambda x: len(x)):直接统计集合的元素个数,因为每个集合只有1个字符串元素,所以返回值全为1
  • 自定义to_1D函数:两层循环把集合内的单个字符串拆成了逐个字符,统计的是所有字符的总数量,和需求完全不符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 22:09:21