如何在Pandas中将含特定子串的列值替换为1,其余为0?
实现方法
这里有几种简洁高效的方式可以实现你的需求:
方法1:使用str.contains() + 类型转换
str.contains()会检查每个字符串是否包含指定子串,返回布尔值(True/False),直接转成整数就能得到1/0:
import pandas as pd sample_df = pd.DataFrame({ 'cars': ['BMW', 'Honda', 'Porshe', 'BMWLuxury', 'TeslaLuxury', 'Ford', 'Ferrari', 'PorsheLuxury'] }) # 生成新列或者替换原列都可以 sample_df['luxury_flag'] = sample_df['cars'].str.contains('Luxury').astype(int) # 如果要替换原列:sample_df['cars'] = sample_df['cars'].str.contains('Luxury').astype(int)
运行后结果:
cars luxury_flag 0 BMW 0 1 Honda 0 2 Porshe 0 3 BMWLuxury 1 4 TeslaLuxury 1 5 Ford 0 6 Ferrari 0 7 PorsheLuxury 1
方法2:使用numpy.where()
如果需要更灵活的条件分支,numpy.where()是不错的选择:
import pandas as pd import numpy as np sample_df = pd.DataFrame({ 'cars': ['BMW', 'Honda', 'Porshe', 'BMWLuxury', 'TeslaLuxury', 'Ford', 'Ferrari', 'PorsheLuxury'] }) sample_df['luxury_flag'] = np.where(sample_df['cars'].str.contains('Luxury'), 1, 0)
方法3:使用apply()自定义函数
适合逻辑更复杂的场景,小数据量下也能轻松使用:
import pandas as pd sample_df = pd.DataFrame({ 'cars': ['BMW', 'Honda', 'Porshe', 'BMWLuxury', 'TeslaLuxury', 'Ford', 'Ferrari', 'PorsheLuxury'] }) def check_luxury(car): return 1 if 'Luxury' in car else 0 sample_df['luxury_flag'] = sample_df['cars'].apply(check_luxury)
注意事项
如果你的数据里存在缺失值(NaN),可以在str.contains()中添加na=False参数,避免生成NaN结果:
sample_df['luxury_flag'] = sample_df['cars'].str.contains('Luxury', na=False).astype(int)
内容的提问来源于stack exchange,提问作者Sofia693
相关产品推荐
相关产品推荐

