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

如何让Pandas groupbyFlatCount函数保留类型信息且不丢失数据?

解决Pandas groupby分组int64列数据丢失问题

修改后的函数

def groupbyFlatCount(frame, by):
    return frame.groupby(by=by, dropna=False).size().reset_index().rename(columns={0:'count'})

问题原因

Pandas groupby 默认参数 dropna=True,会丢弃分组键为缺失值(NaN/NA)的行。当你将int64列转为object类型时,缺失值会被当作一个有效的分组键保留,因此不会丢失数据;而默认的int64(或nullable Int64)列分组时,缺失值会被过滤,导致数据丢失。

验证示例

import pandas as pd
import numpy as np

# 创建包含缺失值的测试DataFrame
df = pd.DataFrame({
    'int_col': pd.Series([1, 2, 2, np.nan], dtype='Int64'),  # nullable int64类型
    'float_col': [1.1, 2.2, 2.2, 3.3],
    'obj_col': ['a', 'b', 'b', None]
})

# 原函数调用(丢失缺失值分组)
print("原函数结果:")
print(groupbyFlatCount(df, 'int_col'))  # 仅显示1、2两个分组

# 修改后函数调用(保留所有分组)
print("\n修改后函数结果:")
print(groupbyFlatCount(df, 'int_col'))  # 包含<NA>分组,且int_col类型仍为Int64

额外说明

  • 该修改不会改变原分组列的数据类型,会完整保留int64/Int64、float64、object等类型信息。
  • 如果你的int64列是普通非nullable类型(无法存储NaN,遇到NaN会自动转为float64),建议先转为nullable Int64类型(frame[by] = frame[by].astype('Int64')),再使用修改后的函数,确保缺失值被正确识别和保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:10:27