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

Pandas groupby().count()在DataFrame子集执行时触发AttributeError

解决Pandas筛选子集赋值时的AttributeError: 'Index' object has no attribute '_hasna'问题

场景与需求

现有两个DataFrame:

  • prodDataframe:包含n和bDatum列,bDatum存在NaT值
  • stammDataframe:以n为索引,包含status和afQuote列

需求:为status=1的行,将afQuote列填充为对应n在prodDataframe中bDatum非NaT的条目数。

正常运行的代码(全量DataFrame)

对完整的stammDataframe执行以下代码可正常完成赋值:

stammDataframe.loc[:, 'afQuote'] = stammDataframe.index.map(prodDataframe.groupby('n')['bDatum'].count())

报错情况(筛选子集)

当筛选出status=1的子集后执行赋值,触发报错:

subDF = stammDataframe.loc[stammDataframe['status'] == 1]
subDF.loc[:, 'afQuote'] = subDF.index.map(prodDataframe.groupby('n')['bDatum'].count())

错误信息:

AttributeError: 'Index' object has no attribute '_hasna'

问题原因

初始创建afQuote列时使用了stammDataframe['afQuote'] = np.NaN,导致该列的数据类型为float;而prodDataframe.groupby('n')['bDatum'].count()返回的是整数类型的结果。在对筛选后的子集进行赋值时,这种类型不兼容性触发了上述错误。

解决方案

有两种可行的修复方式:

方式一:初始创建可空整数类型列

创建afQuote列时直接指定可空整数类型,避免类型不匹配:

stammDataframe['afQuote'] = pd.Series(dtype='Int64')

方式二:将count结果转换为float类型

在映射前把分组统计的结果转为float类型,与初始列的类型匹配:

subDF.loc[:, 'afQuote'] = subDF.index.map(prodDataframe.groupby('n')['bDatum'].count().astype(float))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:18:18