如何统计DataFrame列中嵌套列表的元素数量?
统计DataFrame每行兴趣列表的元素个数
原始数据
| ID | 兴趣 |
|---|---|
| 2131 | ['music','art','travel'] |
| 3213 | [] |
| 3132 | ['martial arts'] |
| 3232 | ['martial arts'] |
期望输出
| ID | 兴趣 |
|---|---|
| 2131 | 3 |
| 3213 | 0 |
| 3132 | 1 |
| 3232 | 1 |
问题分析
你之前用np.ravel和Counter的逻辑是统计整列中各列表的出现次数,并非每行列表内的元素数量,所以达不到预期效果。另外需要注意:你的兴趣列内容是字符串格式的列表,不是真正的Python列表对象,必须先完成格式转换才能统计长度。
解决方案
方法1:用ast.literal_eval转换后统计长度(推荐)
这是最稳妥的方式,能处理规范的字符串格式列表:
import pandas as pd import ast # 模拟你的原始DataFrame data = { 'ID': [2131, 3213, 3132, 3232], '兴趣': ["['music','art','travel']", "[]", "['martial arts']", "['martial arts']"] } df = pd.DataFrame(data) # 将字符串转成真实列表后,直接计算长度 df['兴趣'] = df['兴趣'].apply(lambda x: len(ast.literal_eval(x))) print(df)
方法2:纯字符串操作统计(仅限格式完全规范的场景)
如果不想引入ast模块,可通过字符串切割处理,前提是列表字符串没有嵌套结构、元素不含逗号:
df['兴趣'] = df['兴趣'].apply( lambda x: len([item.strip().strip("'") for item in x.strip('[]').split(',') if item.strip()]) )
内容的提问来源于stack exchange,提问作者yardman
相关产品推荐
相关产品推荐

