pandas提取DataFrame列下划线前字符出现多余0的问题咨询
错误原因
你使用的str(df['name'])是将整个name列的Series对象整体转为字符串,该转换结果会默认携带行索引标识(即你看到的前缀0),后续拆分操作是作用于这个全局字符串,而非逐行处理每个单元格的内容,因此所有行的value列都取到了错误的全局拆分结果。
解决方法
以下是几种常用的正确实现方式:
- 方法1(最推荐,向量化处理性能最优):使用pandas专属的
.str字符串访问器逐行处理
df['value'] = df['name'].str.split('_').str[0]
.str接口会将拆分操作作用于每个单元格的字符串内容,拆分后取第一个元素即可得到下划线前的字符。
- 方法2(适用于自定义复杂逻辑场景):使用
apply逐行处理
df['value'] = df['name'].apply(lambda x: x.split('_')[0])
通过lambda函数对每行的name值单独做拆分处理,拿到第一个元素赋值。
- 方法3(正则提取,适合格式校验场景):用正则匹配提取下划线前的内容
df['value'] = df['name'].str.extract(r'^([^_]+)', expand=False)
正则^([^_]+)会匹配字符串开头到第一个下划线之间的所有字符,expand=False参数直接返回Series对象,可直接赋值。
以上任意方法运行后,你得到的value列都会是无多余前缀的BC。
内容的提问来源于stack exchange,提问作者user3447653
相关产品推荐
相关产品推荐

