如何正确移除Pandas指定列中的所有非数字文本并提取整数?
错误原因
- 你使用的
re.sub('\D', '', '.*')是对固定字符串.*做非数字字符替换,返回结果为空字符串,因此两列全部被赋值为空值 re.sub仅支持对单个字符串做处理,无法直接对Pandas的Series列做批量操作,需要使用Pandas自带的字符串处理方法
正确实现代码
# 先统一转字符串类型,替换所有非数字字符为空后转整数 df['home_score'] = df['home_score'].astype(str).str.replace(r'\D', '', regex=True).astype(int) df['away_score'] = df['away_score'].astype(str).str.replace(r'\D', '', regex=True).astype(int)
代码说明
- 先调用
astype(str)将列的所有值统一转为字符串类型,避免部分本身是整数的数值调用字符串方法时报错 str.replace(r'\D', '', regex=True)是Pandas提供的批量字符串替换方法,会将列中所有值的非数字字符替换为空- 最后调用
astype(int)将处理后的纯数字字符串转为整数类型,即可满足需求
处理后原away_score列的2 ET会被转为整数2,其余正常数字也会保留为整数值。
内容的提问来源于stack exchange,提问作者PyNoob
相关产品推荐
相关产品推荐

