Pandas中如何将列表类型的数组列转换为浮点型数组并计算均值
错误原因
你执行的grouped_reps["util_rate"] = grouped_reps["util_rate"].astype(str).astype(float)报错的核心原因是:astype(str)会将列中的每个列表对象序列化为包含括号、逗号的完整字符串(比如[1.0, 0.75, 0.9]这个整体变成字符串),这类字符串不符合浮点型的格式要求,所以无法直接转换为float类型。
解决方法
分两种场景处理:
场景1:util_rate列本身存储的是Python列表对象(和你示例构造的DataFrame结构一致)
不需要额外做类型转换,直接对每一行的列表计算均值即可,两种实现可选:
- 依赖numpy实现:
import numpy as np grouped_reps['avg_util'] = grouped_reps['util_rate'].apply(np.mean)
- 原生Python实现,无需额外依赖:
grouped_reps['avg_util'] = grouped_reps['util_rate'].apply(lambda x: sum(x)/len(x))
场景2:util_rate列是字符串格式的列表(比如从csv/文本文件读取后得到的格式)
需要先将字符串反序列化为Python列表,再计算均值:
from ast import literal_eval # 先把字符串列表转为真实列表 grouped_reps['util_rate'] = grouped_reps['util_rate'].apply(literal_eval) # 再计算均值 grouped_reps['avg_util'] = grouped_reps['util_rate'].apply(lambda x: sum(x)/len(x))
执行完成后你将得到avg_util新列,存储每个姓名对应的数组均值,示例输出如下:
A util_rate avg_util 0 John [1.0, 0.75, 0.9] 0.883333 1 Mary [1.0, 0.8, 0.87] 0.890000 2 Tom [0.74, 0.34, 0.9, 0.45] 0.607500
内容的提问来源于stack exchange,提问作者garchukins
相关产品推荐
相关产品推荐

