如何将pandas DataFrame中numpy.bool类型值替换为指定字符串
问题说明
现有如下结构的pandas DataFrame:
Name Enrolled JarJar TRUE Boba FALSE
需要实现的效果是将DataFrame中所有不区分大小写的TRUE/FALSE值,分别替换为TRUE_/FALSE_。
初始尝试的正则替换代码如下:
df_to_add = df_to_add.replace('(?i)true', 'TRUE_', regex=True) df_to_add = df_to_add.replace('(?i)false', 'FALSE_', regex=True)
替换失效原因:DataFrame中存储的TRUE/FALSE为numpy.bool_布尔类型,并非字符串类型,正则匹配规则无法作用于非字符串类型的取值。
实现方案
根据使用场景可以选择以下两种方案:
- 全场景兼容方案(同时支持布尔类型值、任意大小写字符串格式的true/false替换)
先将全表值转换为字符串类型,再执行正则替换即可覆盖所有场景:# 全表转字符串后执行正则替换 df_to_add = df_to_add.astype(str) df_to_add = df_to_add.replace('(?i)true', 'TRUE_', regex=True) df_to_add = df_to_add.replace('(?i)false', 'FALSE_', regex=True) - 高性能定向替换方案(适合明确字段类型的场景)
如果不需要处理字符串格式的true/false,仅需替换numpy布尔值,直接通过值映射替换即可,无需启用正则,执行效率更高:
如果需要同时兼容不同大小写的字符串格式true/false,可以补全映射字典,不需要走正则逻辑:# 直接映射布尔值为目标字符串 df_to_add = df_to_add.replace({True: 'TRUE_', False: 'FALSE_'})replace_map = { True: 'TRUE_', False: 'FALSE_', 'TRUE': 'TRUE_', 'True': 'TRUE_', 'true': 'TRUE_', 'FALSE': 'FALSE_', 'False': 'FALSE_', 'false': 'FALSE_' } df_to_add = df_to_add.replace(replace_map)
内容的提问来源于stack exchange,提问作者Barry
相关产品推荐
相关产品推荐

