Pandas转换Age列为int类型报错且replace替换小数点无效求助
居民信息数据集
| 序号 | 门牌号 | 街道 | 名 | 姓 | 年龄 | 与户主关系 | 婚姻状况 | 性别 | 职业 | 残疾情况 | 宗教信仰 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | Smith Radial | Grace | Patel | 46 | 户主 | 丧偶 | 女 | 石油工程师 | 无 | 天主教 |
| 1 | 1 | Smith Radial | Ian | Nixon | 24 | 房客 | 未婚 | 男 | 出版权经理 | 无 | 基督教 |
| 2 | 2 | Smith Radial | Frederick | Read | 87 | 户主 | 离异 | 男 | 退休对外英语教师 | 无 | 天主教 |
| 3 | 3 | Smith Radial | Daniel | Adams | 58 | 户主 | 离异 | 男 | 音乐治疗师 | 无 | 天主教 |
| 4 | 3 | Smith Radial | Matthew | Hall | 13 | 孙子 | 无 | 男 | 学生 | 无 | 无 |
| 5 | 3 | Smith Radial | Steven | Fletcher | 9 | 孙子 | 无 | 男 | 学生 | 无 | 无 |
| 6 | 4 | Smith Radial | Alison | Jenkins | 38 | 户主 | 未婚 | 女 | 物理治疗师 | 无 | 天主教 |
| 7 | 4 | Smith Radial | Kelly | Jenkins | 12 | 女儿 | 无 | 女 | 学生 | 无 | 无 |
| 8 | 5 | Smith Radial | Kim | Browne | 69 | 户主 | 已婚 | 女 | 退休地产经理/土地代理人 | 无 | 基督教 |
| 9 | 5 | Smith Radial | Oliver | Browne | 69 | 配偶 | 已婚 | 男 | 零售采购退休 | 无 | 无 |
问题原因
你使用的df['Age'].replace('.','0')默认是全值匹配替换,只有当单元格内容完全等于.时才会触发替换,而你遇到的异常值是类似'43.54302670766108'的完整字符串,.只是其中的子串,所以无法匹配,替换逻辑自然不生效。
解决方法
方案1:取年龄整数部分(推荐)
正常场景下年龄的小数部分无实际意义,直接取整即可,代码如下:
# 先转浮点型截断无效小数,再转int df['Age'] = df['Age'].astype(float).astype('int')
如果列中存在非数字的异常值,可以用pandas内置的数值转换工具容错处理:
import pandas as pd # 无法转数字的异常值会被转为NaN,这里用0填充,你也可以根据需求调整填充值 df['Age'] = pd.to_numeric(df['Age'], errors='coerce').fillna(0).astype('int')
方案2:按原需求替换小数点为0
如果确实需要把小数点替换为0再转成整数,需要调用字符串子串替换的方法:
# 加str前缀触发子串匹配,regex=False避免把.识别为正则通配符 df['Age'] = df['Age'].str.replace('.','0', regex=False).astype('int')
内容的提问来源于stack exchange,提问作者asli
相关产品推荐
相关产品推荐

