2.4 训练场
2.4.1 知识点概述
2.4.1.1 字符串替换
将字符串:“我在大学的体能极限是1000米3分34秒!” 中的“我”替换为“辰chen”,再将成绩转换为纯数字:
import numpy as np import pandas as pd s1 = '我在大学的体能极限是1000米3分34秒!' # 把 '我' 替换为 '辰chen' s1 = s1.replace('我', '辰chen') display(s1) # 将成绩转换为纯英文的 s2 = "3'34" s2 = s2.replace('\'', '.')# \ 表示转义字符 s2 = float(s2) display(s2)
2.4.1.2 报错演示
score = ["4'03", "4'34", "4'29", "3'48", "3'58", 4] # for循环批量替换 for s in score: s = s.replace('\'', '.') print(s)
可以看出前几个数据都进行了正确的替换,只有最后一个数据因无法替换而报错,报错的原因在于最后一个数据是 int 类型的数据,是不能调用 replace 方法的,replace 只作用于字符串
所以我们在替换的过程中可以进行特判:
2.4.1.3 报错修复
使用 isinstance() 方法判断是否是字符串类型
score = ["4'03", "4'34", "4'29", "3'48", "3'58", 4] # for循环批量替换 for s in score: # 判断s是不是字符串类型数据,这是一个新知识点 if isinstance(s, str): s = s.replace('\'', '.') s = float(s) print(s, type(s))
2.4.2 体测成绩的部分转换
2.4.2.1 男生1000米跑成绩转换
首先我们需要下载一个 Excel 文件:
链接: https://pan.baidu.com/s/1msM5CSZxyJ3TZ5e3TG4XiQ?pwd=w3ut
提取码: w3ut
复制这段内容后打开百度网盘手机App,操作更方便哦
下载完成之后,把该文件和我们的代码放到同一个文件夹下,这一操作我们在之前的博客中已经反复说到,这里就不再进行演示
我们点开我们下载好的文件:
表格有男生表,也有女生表,在男生表中通过观察可以看出,只有 男1000米跑这一列数据是 xx'xx
的形式,我们要把它转为和 男50米跑,男跳远这样的数据形式,并且需要注意到,可能有些同学没有参加 1000米跑的测试,我们需要把这些空数据统一赋值为0
import pandas as pd # 加载男生的体测成绩 # 方法一: df_boy = pd.read_excel('./体测成绩.xlsx', sheet_name = 0) # 方法二: df_boy = pd.read_excel('./体测成绩.xlsx', sheet_name = '男生') # 空数据处理:没有参加体能测试,成绩为0 df_boy = df_boy.fillna(0) def convert(s): if isinstance(s, str): s = float(s.replace('\'', '.')) return s df_boy['男1000米跑'].map(convert)
2.4.2.2 男生1000米跑成绩转换并赋值
import pandas as pd # 加载男生的体测成绩 df_boy = pd.read_excel('./体测成绩.xlsx', sheet_name = 0) # 空数据处理:没有参加体能测试,成绩为0 df_boy = df_boy.fillna(0) def convert(s): if isinstance(s, str): s = float(s.replace('\'', '.')) return s df_boy['男1000米跑'] = df_boy['男1000米跑'].map(convert) # 保存数据,index = False表示不存储行索引 df_boy.to_excel('./男生体测成绩.xlsx', index = False) # 查看前10个数据 df_boy.head(10)
对于女生数据,我们可以做同样的处理
import pandas as pd # 加载女生的体测成绩 df_girl = pd.read_excel('./体测成绩.xlsx',sheet_name = 1) # 空数据处理:没有参加体能测试,成绩为0 df_girl = df_girl.fillna(0) def convert(s): if isinstance(s, str): s = float(s.replace('\'', '.')) return s df_girl['女800米跑'] = df_girl['女800米跑'].apply(convert) # 保存数据,index = False表示不存储行索引 df_girl.to_excel('./女生体测成绩.xlsx', index = False) # 查看后10个数据 df_girl.tail(10)