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

如何按Pandas DataFrame列中列表的长度进行排序?

Pandas按列表列长度排序报错TypeError的解决及原理

你试图按DataFrame中列表列的长度排序,代码运行时抛出TypeError: object of type 'int' has no len():

import pandas as pd

df = pd.DataFrame(
    [
        {"val1": "a", "val2": [1,2,3]}, 
        {"val1": "b", "val2": [1]}, 
        {"val1": "c", "val2": [1,2]}
    ]
)

df = df.sort_values("val2", key=lambda x: len(x), ascending=False)

你的预期是val1列最终顺序为a、c、b。

错误原因

sort_values的key参数接收的是整个目标列的Series对象,而非每行的单个元素。你写的lambda x: len(x)返回的是整个Series的长度(此处为3,一个整数),但Pandas要求key函数必须返回一个与原Series长度一致的序列,每个元素对应原行的排序键,这种不匹配直接触发了错误。

解决方法

需要对Series中的每个列表元素单独计算长度,用apply()或map()遍历处理:

# 使用apply逐个计算列表长度
df = df.sort_values("val2", key=lambda x: x.apply(len), ascending=False)

或者更简洁的map()写法:

df = df.sort_values("val2", key=lambda x: x.map(len), ascending=False)

验证结果

修正后运行代码,得到的DataFrame如下:

val1       val2
0    a  [1, 2, 3]
2    c     [1, 2]
1    b        [1]

val1列顺序符合预期:a、c、b。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 19:25:05