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

DataFrame列表列求最小值遇TypeError错误的解决方法

问题:计算DataFrame列表列的最小值(处理NaN值)

我创建了一个包含Lists列的DataFrame,该列元素为列表,无值时为NaN:

import pandas as pd
df = pd.DataFrame(columns=['Lists', 'Min'])
df['Lists'] = [ [1,2,3], [4,5,6], [7,8,9], float('NaN') ]
print(df)

期望为Min列填入对应行列表的最小值,得到结果:

Lists  Min
0  [1, 2, 3]  1
1  [4, 5, 6]  4
2  [7, 8, 9]  7
3        NaN  NaN

但使用列表推导式df['Min'] = [min(x) for x in df.Lists.tolist()]时,出现TypeError: 'float' object is not iterable错误,该如何实现需求?


错误原因

当遍历到NaN值时,x是float类型,调用min(x)会尝试迭代该float对象,导致报错。核心是需要先判断元素是否为有效列表,再执行最小值计算。

解决方案

方法1:修改列表推导式,增加判断逻辑

直接在列表推导式中加入类型或非空判断,跳过NaN行的计算:

df['Min'] = [min(x) if isinstance(x, list) else float('NaN') for x in df['Lists']]

或者用pandas的缺失值判断函数:

df['Min'] = [min(x) if pd.notna(x) else float('NaN') for x in df['Lists']]

方法2:使用apply方法简化处理

借助pandas的apply方法,配合lambda函数逐行处理:

df['Min'] = df['Lists'].apply(lambda x: min(x) if isinstance(x, list) else pd.NA)

这里使用pd.NA更贴合pandas的缺失值规范,效果和float('NaN')一致但语义更清晰。

方法3:explode+groupby(适合多统计场景)

如果需要对列表做更多统计操作(比如同时算最大、均值),可以先展开列表再分组聚合:

# 展开列表并保留原索引
expanded_df = df['Lists'].explode().reset_index()
# 按原索引分组计算最小值
min_values = expanded_df.groupby('index')['Lists'].min()
# 将结果合并回原DataFrame
df['Min'] = min_values

这种方法会自动将原NaN行的Min设为NaN,无需额外判断。


内容的提问来源于stack exchange,提问作者edge-case

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:16:15