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

如何将分类Series转换为索引并保留NaN、打印类别映射?

解决分类Series编码保留NaN并输出类别映射的问题

核心思路

先将Series转为分类类型,手动替换默认编码中的-1为NaN,同时提取分类与索引的映射关系。

完整实现代码

import pandas as pd

# 示例输入Series(替换成你的实际数据即可)
series = pd.Series(["red", "blue", "green", None, "red", "yellow", "green", None])

# 1. 转换为分类类型,保留原始NaN
cat_series = series.astype("category")

# 2. 生成编码并将默认的-1(对应NaN)替换回NaN
encoded_series = cat_series.cat.codes.replace(-1, pd.NA)

# 3. 构建类别与索引的映射关系,补充NaN的对应项
category_map = {cat: idx for idx, cat in enumerate(cat_series.cat.categories)}
category_map[pd.NA] = pd.NA

# 输出结果
print("编码后的Series:")
print(encoded_series)
print("\n类别-索引对应关系:")
for cat, idx in category_map.items():
    print(f"{cat} -> {idx}")

代码说明

  • 转换为category类型时,pandas会自动识别所有非NaN的唯一值作为类别,顺序是首次出现的顺序
  • cat.codes会给每个类别分配从0开始的整数,NaN对应-1,我们用replace(-1, pd.NA)把NaN还原
  • 通过遍历cat_series.cat.categories可以拿到所有非NaN类别,再手动补充NaN的映射项

运行输出示例

编码后的Series:
0       0
1       1
2       2
3    <NA>
4       0
5       3
6       2
7    <NA>
dtype: Int64

类别-索引对应关系:
red -> 0
blue -> 1
green -> 2
yellow -> 3
<NA> -> <NA>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:48:25