Python pandas如何替换DataFrame不在指定列表内的列值为NA
问题原因
你的代码存在连续赋值逻辑错误:Python的连续赋值是从右向左执行的,df[~df.isin(my_list)] = "NA" 这一步是直接对原df做原地替换,整个赋值表达式的返回值就是你赋的字符串"NA",把这个返回值赋值给df_new,自然只能拿到字符串,得不到修改后的DataFrame。
修正代码
推荐用pandas内置的where方法实现需求,逻辑是保留满足条件的值,不满足条件的值替换为指定内容,不会修改原始DataFrame:
import pandas as pd # 示例数据构造(自己的环境里可跳过这步,直接用已有的df即可) df = pd.DataFrame({ 'Animal': ['Cat', 'Dog', 'Rabbit'], 'Color': ['Brown', 'White', 'Brown'], 'Note': ['Friendly', 'Furry', 'Furry'] }) my_list = ['Dog', 'White', 'Friendly'] # 核心替换逻辑 df_new = df.where(df.isin(my_list), other="NA")
运行后得到的df_new输出如下,完全匹配替换规则:
Animal Color Note 0 NA NA Friendly 1 Dog White NA 2 NA NA NA
注:你给出的期望输出中第三行Note为
Furry,但Furry不在你指定的my_list中,按照规则应该被替换为NA,属于写期望时的笔误。
如果你需要直接修改原始DataFrame,也可以用下面的写法,注意这种方式会覆盖原df的数据:
df[~df.isin(my_list)] = "NA" df_new = df.copy()
内容的提问来源于stack exchange,提问作者user18334254
相关产品推荐
相关产品推荐

