如何在保留分类顺序的前提下对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
相关产品推荐
相关产品推荐

