''' Description: covid datasets显示 Autor: 365JHWZGo Date: 2021-11-11 22:15:46 LastEditors: 365JHWZGo LastEditTime: 2021-11-11 23:35:41 ''' import numpy as np # 我们需要处理的脏数据 row_data = [ ["Name", "StudentID", "Age", "AttendClass", "Score"], ["小明", 20131, 10, 1, 67], ["小花", 20132, 11, 1, 88], ["小菜", 20133, None, 1, "98"], ["小七", 20134, 8, 1, 110], ["花菜", 20134, 98, 0, None], ["刘欣", 20136, 12, 0, 12] ] print('原始数据:n',row_data) # 将脏数据转化为numpy data1 = np.array(row_data) print('预处理的数据:n',data1) # 数据预处理 data_process = [] for i in range(len(row_data)): if i == 0: continue # 不要首行字符串 # 去掉首列名字 data_process.append(row_data[i][1:]) data = np.array(data_process, dtype=np.float) # print("data.dtype", data.dtype) print('需要处理的部分数据:n',data) #清理数据 #判断是否有学号是重复的 sid = data[:, 0] unique, counts = np.unique(sid, return_counts=True) # print(unique) # print(counts) # print(unique[counts > 1]) #修改学号 data[4, 0] = 20135 # print(data) # #判断是否有None # is_nan = np.isnan(data[:,1]) # print("is_nan:", is_nan) # #找到该下标 # nan_idx = np.argwhere(is_nan) # print(nan_idx) # # 计算有数据的平均年龄,用 ~ 符号可以 True/False 对调 # mean_age = data[~np.isnan(data[:,1]), 1].mean() # print("有数据的平均年龄:", mean_age) # ~ 表示 True/False 对调,& 就是逐个做 Python and 的运算 normal_age_mask = ~np.isnan(data[:,1]) & (data[:,1] < 20) # print("normal_age_mask:", normal_age_mask) normal_age_mean = data[normal_age_mask, 1].mean() # print("normal_age_mean:", normal_age_mean) data[~normal_age_mask, 1] = normal_age_mean # print("ages:", data[:, 1]) # 没上课的转成 nan #data[data[:,2] == 0, 3],先判断data[:,2] == 0,再将所有为True的行的第四个数据改为nan data[data[:,2] == 0, 3] = np.nan # 超过 100 分和低于 0 分的都处理一下 #超出100分和低于0分的话则为100或0 data[:, 3] = np.clip(data[:, 3], 0, 100) # print(data[:, 2:]) afterData = np.array(data1, dtype=object) for i in range(len(data)): afterData[i+1][1:] = data[i] print('清理之后的数据:n',afterData)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)