Pandas:如何将列中不在指定字符串列表的值设为np.NaN
解决方案
可以通过Pandas的where方法结合isin筛选,直接将name列中不在指定列表内的所有值(包括空字符串、原有的np.NaN)替换为np.NaN:
import pandas as pd import numpy as np # 初始化原始DataFrame df = pd.DataFrame({ 'name': ['foo','bar', '', 'blue', '', 'buzz', np.NaN ,'red', ''], 'key': [1, 2, 3, 4, 5, 6, 7, 8, 9] }) # 指定需要保留的字符串列表 values_to_keep = ['blue', 'red'] # 处理name列:仅保留列表内的值,其余设为np.NaN df['name'] = df['name'].where(df['name'].isin(values_to_keep), np.NaN) print(df)
执行后得到的结果如下:
name key 0 NaN 1 1 NaN 2 2 NaN 3 3 blue 4 4 NaN 5 5 NaN 6 6 NaN 7 7 red 8 8 NaN 9
逻辑说明
df['name'].isin(values_to_keep)生成布尔序列,标记哪些值属于保留列表;where方法会保留布尔值为True的原数据,将False的位置统一替换为np.NaN;- 原数据中的空字符串、
np.NaN因不在保留列表中,都会被替换为np.NaN,完全匹配需求。
也可以用mask方法实现反向逻辑,效果一致:
df['name'] = df['name'].mask(~df['name'].isin(values_to_keep), np.NaN)
内容的提问来源于stack exchange,提问作者equanimity
相关产品推荐
相关产品推荐

