pandas groupby.agg调用pd.to_numeric触发类型错误的内部原理问询
pandas groupby.agg 报错原因分析
- 你观察到的「逐次传入lambda的x都是一维Series」是
groupby.agg第一轮逐分组、逐列调用聚合函数的正常表现,这一阶段确实没有多维入参。 - 报错的触发点在agg的返回值合并逻辑:当你的lambda函数给单个分组的单个列返回了一个Series而非标量时,pandas会默认将这个Series识别为该分组的多列聚合结果,触发内部的结果堆叠逻辑,把多个分组的返回值拼接成二维结构后,会再次把这个二维结构传入你的lambda函数做格式对齐校验,这个阶段传入的参数ndim>1,直接触发了
pd.to_numeric的入参校验报错。 - 你没有遇到预期的「无法将Series赋值到DataFrame单元格」错误,是因为这个赋值校验逻辑位于agg的单值聚合分支下,只有当pandas确认你返回的是单个值、但长度不符时才会触发;而当返回值为Series时,程序会先进入多列结果合并的分支,还没走到赋值校验环节就已经抛出错误。
- 补充说明:你打印入参只能看到第一轮逐列逐分组调用的入参,内部校验阶段的二维入参不会被你提前加的打印逻辑捕获,才会出现「入参都是一维但报错ndim>1」的矛盾表现。
内容的提问来源于stack exchange,提问作者eliu
相关产品推荐
相关产品推荐

