满足Type列指定条件时将Series Name列替换为np.nan的实现问题
解决Pandas按条件替换DataFrame列值的问题
问题场景
输入数据集:
Series Name Type Food ACG Drinks FEG Food at Home BON
需求:当Type列值为ACG或BON时,将Series Name列替换为np.nan或空白字符串。
原代码错误分析
你写的代码存在语法逻辑错误:
df.loc[((df['Type'] == 'ACG') | (df['Type'] == 'BON')), df['Series Name'].replace(np.nan)]
loc的第二个参数应该是列名(字符串),而非df['Series Name'].replace(np.nan)这种返回Series的操作- 代码未完成赋值动作,仅做了无效的索引定位
正确实现代码
方式1:使用loc定位赋值(最直观)
import pandas as pd import numpy as np # 构造示例数据 df = pd.DataFrame({ 'Series Name': ['Food', 'Drinks', 'Food at Home'], 'Type': ['ACG', 'FEG', 'BON'] }) # 按条件替换为np.nan(Pandas默认显示为空白) df.loc[df['Type'].isin(['ACG', 'BON']), 'Series Name'] = np.nan # 若需替换为空白字符串而非nan,改为: # df.loc[df['Type'].isin(['ACG', 'BON']), 'Series Name'] = ''
方式2:使用mask函数(更简洁)
mask函数会自动将满足条件的元素替换为指定值:
df['Series Name'] = df['Series Name'].mask(df['Type'].isin(['ACG', 'BON']), np.nan)
执行结果
替换为np.nan后,DataFrame显示如下:
Series Name Type 0 ACG 1 Drinks FEG 2 BON
注:你给出的期望输出中Type=FEG的行也被替换,但根据需求描述应保留Drinks,上述代码严格按你的需求实现,若需调整条件可修改isin中的参数。
内容的提问来源于stack exchange,提问作者Linear17
相关产品推荐
相关产品推荐

