如何在Pandas DataFrame中将印度、美国以外的国家替换为Other?
解决Pandas替换指定外类别为Other的问题
针对你需要将Q0_0列中除India和U.S.A外的所有国家替换为Other的需求,以下是几种可行的方法:
方法1:使用np.where(最直观易用)
通过条件判断直接替换,逻辑清晰,适合大多数场景:
import pandas as pd import numpy as np # 你的原始DataFrame df = pd.DataFrame({ 'Q0_0': ["India", "Algeria", "India", "U.S.A", "Morocco", "Tunisia", "U.S.A", "France", "Russia", "Algeria"], 'Q1_1': [np.random.randint(1,100) for i in range(10)], 'Q1_2': np.random.random(10), 'Q1_3': np.random.randint(2, size=10), 'Q2_1': [np.random.randint(1,100) for i in range(10)], 'Q2_2': np.random.random(10), 'Q2_3': np.random.randint(2, size=10) }) # 定义需要保留的国家列表 target_countries = ["India", "U.S.A"] # 执行替换:如果列值在目标列表里则保留原内容,否则替换为Other df['Q0_0'] = np.where(df['Q0_0'].isin(target_countries), df['Q0_0'], 'Other')
方法2:使用Series.mask
和np.where逻辑类似,是Pandas Series自带的条件替换方法:
df['Q0_0'] = df['Q0_0'].mask(~df['Q0_0'].isin(target_countries), 'Other')
这里的~表示取反,即当列值不在目标列表中时,替换为Other。
方法3:用str.replace结合正则表达式(如果你一定要用这个方法)
之前直接用str.replace失败,是因为它默认替换的是包含指定子串的内容,而你需要的是精确匹配整个字符串并排除指定值。可以通过正则的负向前瞻实现:
# 构造正则:匹配既不是India也不是U.S.A的完整字符串 pattern = r'^(?!India$|U\.S\.A$).*' df['Q0_0'] = df['Q0_0'].str.replace(pattern, 'Other', regex=True)
注意正则里的.需要转义成\.,因为.在正则中代表任意字符,^和$确保匹配整个字符串。
内容的提问来源于stack exchange,提问作者Khaled DELLAL
相关产品推荐
相关产品推荐

