#%% # CY3761 | 2022-01-08 15:33 #%% # 套用模版后记住先执行-全部运行 #%% # 导入项 import numpy as np import pandas as pd np, pd #%% def printData(o): oItems = dict(dtype=None,dtypes=None,shape=None,size=None,index=None,columns=None) for (k,v) in oItems.items(): try: oItems[k] = eval(f'o.{k}') except (Exception, baseException) as e: pass print(type(o), 'n', oItems) #%% rMin = 65 rChr = [chr(_) for _ in range(rMin, rMin+26)] np.array(rChr) #%% md # 作业-体测成绩转换 #%% md + 知识点概述 + 数据转换 + 体侧成绩评分表数据转换 + 男生体侧成绩分数转换 + 女生体侧成绩分数转换 + 保存成绩 #%% md ## 知识点概述 #%% md ### 字符串替换 #%% a01 = '我大学体能极限是1000米3分34秒' a01.replace('我', '派') # 将字符串中的 "我" 替换成 "派" | 在字符串中找到第一个参数值并替换为第二参数值 #%% a02 = "4'04" float(a02.replace("'", '.')) # 字符串替换为浮点数 这里需要注意, 转换后的字符串如果是能转为数值那可以这样 否则报错 #%% print('"', "'") # 但出现字符串需要使用单引号或双引号 扩住的引号就需要转换成双引号或单引号 print('"'', ""'") # 但如果字符串需要使用单引号和双引号就需要注意 扩住的引号无论怎么转换都没用, 这里需要进行对使用引号与扩住的引号相同的引号进行转义 单引号转义单引号 双引号转义双引号 print(''''"''', """"'""") # 可以使用三引号进行不转义处理, 但对应引号不能作为末尾字符 print('\', "\", '''_''', """_""") # 需要输出反斜杠, 需要将其进行转义 同样三引号可以不进行转义 但不能作为末尾字符 print(r'_', '_', r"_", '_') # 反斜杠可以不进行转义 但不能作为末尾字符 | 主要原因是反斜杠会与后面的字符作为一个整体 #%% md ### 报错演示与修复 #%% a03 = ["4'03", "4'34", "4'29", "3'48", "3'58", 4] # [_.replace("'",'.') for _ in a03] # 循环时可能参数的数据类型是不定的如果非字符串 就不能直接替换了 | AttributeError: 'int' object has no attribute 'replace' b03 = [float(str(_).replace("'",'.')) for _ in a03] # 这就正常了 并且转为浮点型 np.array(b03) #%% np.array([float(_.replace("'",'.')) if isinstance(_, str) else _ for _ in a03]) # 或者这样 #%% path_01 = '体测成绩.xlsx' # 有男生女生 2张表 #%% # 男: M(Male) # 女: F(Female) xls_01_M = pd.read_excel(path_01, sheet_name='男生') xls_01_F = pd.read_excel(path_01, sheet_name='女生') #%% md ## 数据转换 #%% md + 里面有空数据,说明这名学生没有参加这项体侧,将空数据填充为0 + 1000米跑的数据需要转换,将4'13(字符串)转为 4.13(浮点数) #%% display(xls_01_M) xls_01_F #%% xls_01_M = xls_01_M.fillna(0) # 填充空数据的会替换为0 display(xls_01_M) xls_01_F = xls_01_F.fillna(0) # 填充空数据的会替换为0 xls_01_F #%% def func01(x): return float(str(x).replace("'", '.')) xls_01_M['男1000米跑'] = xls_01_M['男1000米跑'].map(func01) xls_01_F['女800米跑'] = xls_01_F['女800米跑'].map(func01) xls_01_M['男1000米跑'] #%% xls_01_F['女800米跑'] #%% old_path = path_01.split('.') new_path = old_path[0] + '-结果1.' + old_path[1] # 一起保存 with pd.ExcelWriter(new_path) as w: xls_01_M.to_excel(w, sheet_name='男生', index=False) xls_01_F.to_excel(w, sheet_name='女生', index=False) # 分开保存 xls_01_M.to_excel(old_path[0] + '-男生结果1.' + old_path[1], sheet_name='男生', index=False) xls_01_F.to_excel(old_path[0] + '-女生结果1.' + old_path[1], sheet_name='女生', index=False) #%% md ## 体侧成绩评分表数据转换 #%% path_02 = '体侧成绩评分表.xls' # 表头2行 多层索引 xls_02 = pd.read_excel(path_02, header=[0,1]) xls_02 = xls_02.fillna(0) # 数据清洗 xls_02 #%% def func02(x): m,s = [int(_) for _ in str(x).strip('"').split("'")] # 去除尾部引号 使用 单引号进行分割 使用列表生产式进行处理值 return m + s/100 # 结果返回 成绩 s是 0~99 100个数 # 男1000米跑 成绩 xls_02['男1000米跑']['成绩'] #%% # 女800米跑 成绩 xls_02['女800米跑']['成绩'] #%% xls_02.columns isinstance() # 这里不用关键字索引 多个中括号 因为第二个中括号视为行号 # xls_02['男1000米跑']['成绩'] = xls_02['男1000米跑']['成绩'].apply(func02) # xls_02['女800米跑']['成绩'] = xls_02['女800米跑']['成绩'].apply(func02) #%% xls_02['男1000米跑']['成绩'] #%% md ## 男生体侧成绩分数转换 #%% (先发,占位) #%% md ## 女生体侧成绩分数转换 #%% md ## 保存成绩 #%%
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)