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

如何在保留分类顺序的前提下对pandas分类列做大小写不敏感的np.nan替换?

分类列大小写不敏感替换为np.nan且保留分类顺序的最优方法

要实现保持原有分类顺序的同时,大小写不敏感地将指定值替换为np.nan,可以用以下两种高效方法:

方法一:布尔索引结合字符串小写匹配

利用分类列的str.lower()方法统一转换为小写,匹配目标值后通过索引赋值,这种方式直观且无需额外依赖:

import pandas as pd 
import numpy as np 

# 创建带有有序分类的DataFrame
values = ['one','two','three','na','Na','NA']
df = pd.DataFrame({
    'categ' : values
})
df['categ'] = df['categ'].astype('category')
df['categ'].cat.categories = values

# 替换所有大小写形式的na为np.nan
df.loc[df['categ'].str.lower() == 'na', 'categ'] = np.nan

方法二:正则表达式匹配(更灵活)

使用replace方法的正则参数,通过re.IGNORECASE实现大小写不敏感匹配,适合复杂匹配场景:

import pandas as pd 
import numpy as np 
import re

# 创建带有有序分类的DataFrame
values = ['one','two','three','na','Na','NA']
df = pd.DataFrame({
    'categ' : values
})
df['categ'] = df['categ'].astype('category')
df['categ'].cat.categories = values

# 正则匹配替换
df['categ'] = df['categ'].replace(
    to_replace=r'^na$',  # 精确匹配整个字符串
    value=np.nan,
    regex=True,
    flags=re.IGNORECASE
)

关键说明

两种方法都不会修改原分类的顺序——我们仅替换列中的元素值为np.nan,并未改动df['categ'].cat.categories,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:00:56