You need to enable JavaScript to run this app. Pandas groupby调用first方法未跳过None值 传入dropna参数报错
优惠活动
大模型
产品
解决方案
定价
更多

Pandas groupby调用first方法未跳过None值 传入dropna参数报错

报错原因
  • 你使用的pandas版本低于1.1.0:dropna参数是pandas 1.1.0版本才为groupby.first()方法新增的配置项,旧版本调用时传入该参数就会抛出unexpected keyword argument 'dropna'的报错。
  • first()未自动跳过None的根因:你构造DataFrame时用np.array包裹同时包含整数和None的元组,numpy会自动将数组类型设为object,此时存储的是Python原生None对象,老版本pandas聚合时默认不会将这类值识别为需要跳过的缺失值,因此会直接返回分组中第一个出现的None。
无需提前转换None的解决方案

如果确实无法在分组前将None转换为pandas可识别的缺失值,可以用分组后自定义过滤取数的逻辑实现需求:

import numpy as np
import pandas as pd
df = pd.DataFrame(np.array([(1, 29),(1, 50),(2, None),(2, 12),(3,None)]),columns=['day', 'amount'])
# 自定义取分组第一个非空值
res = df.groupby('day')['amount'].apply(
    lambda group: group[group.notna()].iloc[0] if group.notna().any() else None
)

输出结果符合预期:

day
1      29
2      12
3    None
Name: amount, dtype: object
可升级pandas的优化方案

如果可以升级pandas到1.1.0及以上版本,也可以先做缺失值兼容再调用带参数的first():

# 先把列转换为数值类型,原生None会自动转为np.nan
df['amount'] = pd.to_numeric(df['amount'], errors='coerce')
# 调用带dropna参数的first
res = df.groupby('day')['amount'].first(dropna=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 02:54:02