对如下数据进行清洗,求总分并分类。
代码
import pandas as pd # 1、读取数据并显示行列数 df = pd.read_csv(r'rz.csv') print(df.shape) # 2、重复列处理 print(df.duplicated().tail()) print(df[df.duplicated()]) df1 = df.drop_duplicates() # 3、空白列处理 print(df.isnull().tail()) # 判断存在空白的列 print(df1.isnull().any()) # 显示存在空白的行数据 print(df1[df1.isnull().values]) df2 = df1.fillna(0) # 4、字符串去空格 df0 = df2.copy() for clo in df2.columns: if df2[clo].dtype == 'O': df0[clo] = df2[clo].astype(str).map(str.strip) print(clo) # 5、以0填充非int类型数据 # df0.replace({'体育': '作弊', '军训': '缺考'}, 0) ty = list(df0.体育) j = 0 for i in ty: if type(i) != int: try: ty[j] = int(i) except ValueError as a: ty[j] = 0 j += 1 df0.体育 = ty ty = list(df0.军训) j = 0 for i in ty: if type(i) != int: try: ty[j] = int(i) except ValueError as a: ty[j] = 0 j += 1 df0.军训 = ty print(df0) # 6、求总分并分类 df3 = df0.copy() df3['score'] = df3.英语 + df3.体育 + df3.军训 + df3.数分 + df3.高代 + df3.解几 print(df3.score.describe()) bins = [df3.score.min() - 1, 400, 450, df3.score.max() + 1] label = ["一般", "较好", "优秀"] df4 = pd.cut(df3.score, bins, right=False, labels=label) df3['类别'] = df4 print(df3) # 7、标准化后求总分并分类 for i in df0.columns[4:]: df0[i] = (df0[i] - df0[i].min()) / (df0[i].max() - df0[i].min()) df0['score'] = df0.英语 + df0.体育 + df0.军训 + df0.数分 + df0.高代 + df0.解几 print(df0.score.describe()) bins = [df0.score.min() - 1, 3, 4, df0.score.max() + 1] label = ["一般", "较好", "优秀"] df4 = pd.cut(df0.score, bins, right=False, labels=label) df0['类别'] = df4 print(df0)
运行结果
(21, 10) 16 False 17 False 18 False 19 False 20 True dtype: bool 学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几 20 2308024201 23080242 迟培 男 60 50 89 71 76 71 学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几 16 False False False False False False False False False False 17 False False False False False False False False False False 18 False False False False False False False False False False 19 False False False False False False False False False False 20 False False False False False False False False False False 学号 False 班级 False 姓名 False 性别 False 英语 False 体育 False 军训 True 数分 False 高代 False 解几 False dtype: bool 学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几 14 2308024446 23080244 周路 女 76 80 NaN 61 74 80 姓名 性别 体育 军训 学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几 0 2308024241 23080242 成龙 男 76 78 77 40 23 60 1 2308024244 23080242 周怡 女 66 91 75 47 47 44 2 2308024251 23080242 张波 男 85 81 75 45 45 60 3 2308024249 23080242 朱浩 男 65 50 80 72 62 71 4 2308024219 23080242 封印 女 73 88 92 61 47 46 5 2308024201 23080242 迟培 男 60 50 89 71 76 71 6 2308024347 23080243 李华 女 67 61 84 61 65 78 7 2308024307 23080243 陈田 男 76 79 86 69 40 69 8 2308024326 23080243 余皓 男 66 67 85 65 61 71 9 2308024320 23080243 李嘉 女 62 0 90 60 67 77 10 2308024342 23080243 李上初 男 76 90 84 60 66 60 11 2308024310 23080243 郭窦 女 79 67 84 64 64 79 12 2308024435 23080244 姜毅涛 男 77 71 0 61 73 76 13 2308024432 23080244 赵宇 男 74 74 88 68 70 71 14 2308024446 23080244 周路 女 76 80 0 61 74 80 15 2308024421 23080244 林建祥 男 72 72 81 63 90 75 16 2308024433 23080244 李大强 男 79 76 77 78 70 70 17 2308024428 23080244 李侧通 男 64 96 91 69 60 77 18 2308024402 23080244 王慧 女 73 74 93 70 71 75 19 2308024422 23080244 李晓亮 男 85 60 85 72 72 83 count 20.000000 mean 413.250000 std 36.230076 min 354.000000 25% 386.000000 50% 416.500000 75% 446.250000 max 457.000000 Name: score, dtype: float64 学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几 score 类别 0 2308024241 23080242 成龙 男 76 78 77 40 23 60 354 一般 1 2308024244 23080242 周怡 女 66 91 75 47 47 44 370 一般 2 2308024251 23080242 张波 男 85 81 75 45 45 60 391 一般 3 2308024249 23080242 朱浩 男 65 50 80 72 62 71 400 较好 4 2308024219 23080242 封印 女 73 88 92 61 47 46 407 较好 5 2308024201 23080242 迟培 男 60 50 89 71 76 71 417 较好 6 2308024347 23080243 李华 女 67 61 84 61 65 78 416 较好 7 2308024307 23080243 陈田 男 76 79 86 69 40 69 419 较好 8 2308024326 23080243 余皓 男 66 67 85 65 61 71 415 较好 9 2308024320 23080243 李嘉 女 62 0 90 60 67 77 356 一般 10 2308024342 23080243 李上初 男 76 90 84 60 66 60 436 较好 11 2308024310 23080243 郭窦 女 79 67 84 64 64 79 437 较好 12 2308024435 23080244 姜毅涛 男 77 71 0 61 73 76 358 一般 13 2308024432 23080244 赵宇 男 74 74 88 68 70 71 445 较好 14 2308024446 23080244 周路 女 76 80 0 61 74 80 371 一般 15 2308024421 23080244 林建祥 男 72 72 81 63 90 75 453 优秀 16 2308024433 23080244 李大强 男 79 76 77 78 70 70 450 优秀 17 2308024428 23080244 李侧通 男 64 96 91 69 60 77 457 优秀 18 2308024402 23080244 王慧 女 73 74 93 70 71 75 456 优秀 19 2308024422 23080244 李晓亮 男 85 60 85 72 72 83 457 优秀 count 20.000000 mean 3.892161 std 0.668808 min 2.536788 25% 3.534346 50% 3.823450 75% 4.431060 max 5.112427 Name: score, dtype: float64 学号 班级 姓名 性别 ... 高代 解几 score 类别 0 2308024241 23080242 成龙 男 ... 0.000000 0.410256 2.690713 一般 1 2308024244 23080242 周怡 女 ... 0.358209 0.000000 2.536788 一般 2 2308024251 23080242 张波 男 ... 0.328358 0.410256 3.520395 较好 3 2308024249 23080242 朱浩 男 ... 0.582090 0.692308 3.697551 较好 4 2308024219 23080242 封印 女 ... 0.358209 0.051282 3.388037 较好 5 2308024201 23080242 迟培 男 ... 0.791045 0.692308 3.776965 较好 6 2308024347 23080243 李华 女 ... 0.626866 0.871795 3.869935 较好 7 2308024307 23080243 陈田 男 ... 0.253731 0.641026 4.045563 优秀 8 2308024326 23080243 余皓 男 ... 0.567164 0.692308 3.769262 较好 9 2308024320 23080243 李嘉 女 ... 0.656716 0.846154 3.076928 较好 10 2308024342 23080243 李上初 男 ... 0.641791 0.410256 4.059089 优秀 11 2308024310 23080243 郭窦 女 ... 0.611940 0.897436 4.502098 优秀 12 2308024435 23080244 姜毅涛 男 ... 0.746269 0.820513 3.538996 较好 13 2308024432 23080244 赵宇 男 ... 0.701493 0.692308 4.407712 优秀 14 2308024446 23080244 周路 女 ... 0.761194 0.923077 3.710236 较好 15 2308024421 23080244 林建祥 男 ... 1.000000 0.794872 4.501103 优秀 16 2308024433 23080244 李大强 男 ... 0.701493 0.666667 4.747783 优秀 17 2308024428 23080244 李侧通 男 ... 0.552239 0.846154 4.300045 优秀 18 2308024402 23080244 王慧 女 ... 0.716418 0.794872 4.591597 优秀 19 2308024422 23080244 李晓亮 男 ... 0.731343 1.000000 5.112427 优秀 [20 rows x 12 columns]