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

Pandas groupby聚合字符串列报TypeError如何解决

错误原因

这个报错的触发逻辑非常直接:str.join()方法仅支持拼接字符串类型的元素,你传入的待拼接序列里存在float类型的值,就会抛出这个类型错误。
具体到你的代码场景,90%以上的概率是Initial 列存在空值NaN——pandas中空值NaN的默认类型就是float,哪怕这列其他内容全是字符串,只要混了NaN,x.unique()取到的唯一值序列里就会带float类型的NaN,传入'/'.join()时直接触发报错。剩余小概率情况是Initial 列本身就混合存储了字符串、浮点数值两类数据,没有做类型统一。
另外提醒一句:你代码里写的列名Type 、Initial 尾部都带了空格,要先确认原始DataFrame的列名确实带这个尾部空格,避免后续触发列不存在的报错。

修复方案

核心修改思路是在拼接前统一处理值的类型、过滤掉会导致类型错误的空值,推荐两种可直接用的写法:

  • 方案1:直接修改聚合逻辑里的lambda函数,不需要提前处理原表,兼容性最好
    把原来聚合Initial 列的lambda逻辑替换为带空值过滤、类型转换的版本即可:

    dfz = dfy.groupby('Type ').agg({
        'Initial ': lambda x: '/'.join(str(item) for item in x.dropna().unique()),
        2021: 'sum',
        2022: 'sum'
    }).reset_index()
    

    逻辑说明:x.dropna()先剔除分组内该列的空值,遍历剩余唯一值时统一转成字符串再拼接,不管列里混了什么类型的非空值,都不会触发join的类型错误。

  • 方案2:如果确定列里除了空值没有其他非字符串内容,也可以提前填充空值再走原逻辑

    # 先把Initial列的空值替换为空字符串,消除float类型的NaN
    dfy['Initial '] = dfy['Initial '].fillna('')
    # 再执行原分组聚合逻辑
    dfz = dfy.groupby('Type ').agg({
        'Initial ': lambda x: '/'.join(x.unique()),
        2021: 'sum',
        2022: 'sum'
    }).reset_index()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:30:47