前言
系列文章目录
视频及资料和课件
链接:https://pan.baidu.com/s/1LCv_qyWslwB-MYw56fjbDg?pwd=1234
提取码:1234
数据、文献
数据、文献:
1. 缺失值处理
- 对于缺失值一般有两种处理方式:
- 1.将缺失值直接删除
- 2.对缺失值进行填补
1.1 缺失值删除
1.1.1 适用情况
- 对于缺失值采用直接删除的方式进行处理有如下几种情况:
- 1.对于数据表中的一行,如果整行数据缺失,或者是在一行中所需要使用的数据列对应的数据缺失,那么可以将这一行直接进行删除。
如:
- 2.如果在一行或者一列中存在大量的数据缺失,那么可以对该行或该列直接进行删除。
在一行或一列中,数据的缺失量是否达到需要删除该行或该列,需要视情况而定,这没有十分准确的标准。
- 如:
表1:
表2:
1.1.2 代码实现
1.1.2.1 情况一代码
通过调用 dropna() 方法,删除整行数据缺失的行,或者在一行中所需要使用的数据列对应的数据缺失的行。
- dropna():
- 参数:
- axis:表示轴向,0为删除行,1为删除列,默认为0.
- how:接收 string 类型的数据为参数,表示删除的方式,any 表示只要有缺失值就删除该行或列,all表示全部为缺失值才删除行或列。默认为any。
- subset:接收 array 类型的数据为参数,表示进行缺失值处理的行或列,默认为None,表示所有的行或列。
- inplace:表示是否在原表上进行操作,默认为False。
# 包的导入 import pandas as pd # 读取数据 data = pd.read_excel('../../监测点C逐日污染物浓度实测数据.xlsx') # 删除数据缺失的行 # 当 subset 指定的列全部缺失才删除对应的行 data_new = data.dropna( how='all', subset=[ 'SO2实测日均(μg/m³)', 'NO2实测日均(μg/m³)', 'PM10实测日均(μg/m³)', 'PM2.5实测日均(μg/m³)', 'O3实测八小时滑动平均日最大值(μg/m³)', 'CO实测日均(mg/m³)' ] ) # print(data_new) # 导出处理后的数据 data_new.to_excel('./1.xlsx')
1.1.2.2 情况二代码
- 如果在一行中存在大量的数据缺失,直接删除该行。
数据表表1
中一共有8列数据,除去第一第二列,剩下六列数据,当一行中缺失的数据大于等于4个时,将该行删除。
- 先调用 apply() 方法对数据表的每行进行处理,然后再对数据表中需要删除的行进行删除。
- apply():
- 参数:
- func:接收一个函数作为参数,该函数为对数据表中的每行或每列进行处理的函数,该函数接收有一个参数,用于接收传入的数据表中的行或列。
- axis:轴向,axis=1表示对数据表中的每行进行处理,axis=0表示对数据表中的每列进行处理。
# 包的导入 import pandas as pd import numpy as np # 读取数据 data = pd.read_excel('../../监测点C逐日污染物浓度实测数据.xlsx') # 当一行中的数据,除去第一第二列, # 缺失的数据个数大于等于4(该表中一共8列数据) # 返回空行 # 否则将原来的行返回 def fun(row): sub_row = row[2:] cnt = sub_row.count() if cnt<=2 : # return None return np.nan else : return row # 调用 apply() 方法对每行数据进行处理 re = data.apply(fun, axis=1) # 删除整行数据为空的行,直接修改原表 re.dropna(how='all', inplace=True)
- 如果在一列中存在大量的数据缺失,直接删除该列。
通过对表2
中,每列非空数据的统计,发现湿度这一列存在大量的数据缺失,所以将这列数据整列进行删除。
- 删除指定列的方法:
- pop():
- pop() 方法一次只能删除一列数据,且是对原数组直接进行列的删除,同时会返回删除的列的数据。
- 参数:
- item:需要删除的列的列名。
- drop():
- drop() 方法支持多列删除,不对原数组直接进行列的删除,会返回一个删除指定列后的新数组。
- 参数:
- labels:接收一个字符串类型数据或一个序列为参数,表示要删除的列。
- axis:轴向,axis=1表示对列进行删除,axis=0表示对行进行删除。
- (1)使用 pop() 方法删除指定列:
# 包的导入 import pandas as pd # 读取数据 data = pd.read_excel('../../监测点C逐小时污染物浓度与气象实测数据.xlsx') # 删除指定列 data.pop('湿度(%)') data