如何将DataFrame中的邮箱域名列转换为0/1数值标记列
解决邮箱域名转数值标记的问题
我来帮你搞定这个需求!首先看你已经写了部分转换函数,咱们先把它补全,同时再给你推荐更高效的pandas原生方法——毕竟逐行apply在数据量大的时候效率会低一些,用pandas自带的矢量化操作会快很多。
方法一:完善你的自定义函数
如果坚持用自定义函数的方式,你可以把它补全成这样,逻辑更简洁:
def convertToNumber(row): if row['emailDomain'] in ('[gmail]', '[aol]'): return 1 else: return 0 # 将函数应用到DataFrame的每一行,生成新列 data['domainFlag'] = data.apply(convertToNumber, axis=1)
方法二:更高效的pandas矢量化操作
推荐用isin配合布尔值转整数的方式,代码更简洁,执行速度也更快:
# 直接判断域名是否在目标集合中,布尔值转int后,True对应1,False对应0 data['domainFlag'] = data['emailDomain'].isin(['[gmail]', '[aol]']).astype(int)
或者用numpy.where实现,逻辑更直观:
import numpy as np data['domainFlag'] = np.where(data['emailDomain'].isin(['[gmail]', '[aol]']), 1, 0)
额外提醒:如果域名是列表类型
注意到你示例里的emailDomain显示为[gmail],如果这不是字符串而是列表类型(比如每个单元格是['gmail']这样的列表),那得先提取列表里的元素再判断:
# 提取列表中的第一个元素,生成清洗后的域名列 data['clean_domain'] = data['emailDomain'].str[0] # 再进行标记转换 data['domainFlag'] = data['clean_domain'].isin(['gmail', 'aol']).astype(int)
内容的提问来源于stack exchange,提问作者Mahboob Mustafa
相关产品推荐
相关产品推荐

