如何在Pandas中替换含"Local"的Col1值为对应Col2内容?
解决DataFrame列包含指定字符串时的替换问题
你的代码存在的问题:
- 第一个代码:
['Col1'].str.contains是对字符串列表操作,不是针对DataFrame的Col1列,且replace方法无法直接用列名作为替换值。 - 第二个代码:
isin(['Local'])是精确匹配(检查Col1是否等于"Local"),不是包含匹配;同时赋值['Col2']是把Col1改成字符串"Col2",而非取对应行Col2的实际值。 - 第三个代码:同样犯了
isin(['Local'])精确匹配的错误,只有当Client Name_x完全等于"Local"时才会替换,不符合你"包含"的需求。
正确实现方式:
方法1:使用loc+str.contains
这是最直观的写法,先筛选出符合条件的行,再赋值对应Col2的值:
# 筛选Col1包含"Local"的行,将这些行的Col1替换为Col2的值 df.loc[df['Col1'].str.contains('Local'), 'Col1'] = df['Col2'] # 如果Col1存在空值(NaN),建议加上na=False避免筛选出错 df.loc[df['Col1'].str.contains('Local', na=False), 'Col1'] = df['Col2']
方法2:使用mask或where
mask:满足条件时替换为指定值
df['Col1'] = df['Col1'].mask(df['Col1'].str.contains('Local', na=False), df['Col2'])
where:满足条件时保留第二个参数的值,否则保留原列值(注意条件逻辑)
df['Col1'] = df['Col2'].where(df['Col1'].str.contains('Local', na=False), df['Col1'])
内容的提问来源于stack exchange,提问作者LaurieG
相关产品推荐
相关产品推荐

