- (2)使用 drop() 方法删除指定列:
# 包的导入 import pandas as pd # 读取数据 data = pd.read_excel('../../监测点C逐小时污染物浓度与气象实测数据.xlsx') # 删除指定列 re = data.drop('湿度(%)', axis=1) re
# 包的导入 import pandas as pd # 读取数据 data = pd.read_excel('../../监测点C逐小时污染物浓度与气象实测数据.xlsx') # 删除指定列 re = data.drop(['湿度(%)'], axis=1) re
- (3)使用 apply() 方法对每列进行处理,然后使用 dropna() 方法删除数据量缺失过大的列:
- apply():
- 参数:
- func:接收一个函数作为参数,该函数为对数据表中的每行或每列进行处理的函数,该函数接收有一个参数,用于接收传入的数据表中的行或列。
- axis:轴向,axis=1表示对数据表中的每行进行处理,axis=0表示对数据表中的每列进行处理。
- dropna():
- 参数:
- axis:表示轴向,0为删除行,1为删除列,默认为0.
- how:接收 string 类型的数据为参数,表示删除的方式,any 表示只要有缺失值就删除该行或列,all表示全部为缺失值才删除行或列。默认为any。
- subset:接收 array 类型的数据为参数,表示进行缺失值处理的行或列,默认为None,表示所有的行或列。
- inplace:表示是否在原表上进行操作,默认为False。
假设数据的缺失达到0.3为数据缺失过多,需要将该列进行删除。
湿度这列非空的数据个数为13310,表2中的总行数为19491,湿度列的数据缺失已达0.3,所有要将湿度这一列进行删除。
# 包的导入 import pandas as pd import numpy as np # 读取数据 data = pd.read_excel('../../监测点C逐小时污染物浓度与气象实测数据.xlsx') # 获取所有列中非空数据个数最多的列的数据个数 max_num = data.count().max() # 处理数据表中的每列 # 数据缺失过多,将整列修改为空 def fun(col): # print(col.count()) # 计算每列的非空数据个数 num = col.count() # 假设数据缺失达到0.3为数据缺失过多 # 需要对该列进行删除 if (num/max_num < 0.7): # 返回空 return np.nan else: return col # re = data.apply(fun) re = data.apply(fun, axis=0) # 删除整列为空的列 re.dropna(how='all', inplace=True, axis=1)
1.2 缺失值填补
- 对缺失值进行填补,有如下几种方法:
- 1.使用一个常数对表中的所有缺失值进行填补。
- 2.使用缺失值所在的行或列的上一个或下一个非缺失值进行填补。
- 3.使用缺失值所在的行或列的平均值进行填补。
- 4.使用缺失值所在的行或列的众数进行填补。
- 5.使用缺失值所在的行或列的中位数进行填补。
- 6.使用缺失值所在的行或列的前一个和后一个非缺失值的均值进行填补。
- 7.使用拉格朗日插值法对缺失值进行填补
- 8.使用预测模型对缺失值进行填补
使用哪种缺失值填补方法对缺失值进行填补,需要根据数据所在的实际场景进行分析与选择,使得缺失值填补后,对最后的结果造成的影响尽可能的小。
一般缺失值的填补是针对存在少量数据缺失的行或列,或者是删除整行数据缺失的行和大量数据缺失的行与列后数据集中仍有部分数据缺失的行或列。
如:
fillna()
- 参数:
- value:表示用来替换缺失值的值
- method:接收 string 为参数,backfill或bfill表示使用下一个非缺失值进行替换,pad或ffill表示使用上一个非缺失值进行替换,默认为None
- axis:表示轴向,axis=1表示在一行中如果有缺失值,使用上一列或下一列的数据来填补缺失值;axis=0表示在一列中如果有缺失值,使用上一行或下一行的数据来填补缺失值。
- inplace:表示是否在原表上进行操作,默认为False。
- limit:表示填补缺失值的个数上限,默认为None
- value与method选择其一即可
以下的举例均不考虑实际的应用情况和实际场景。
每个例子使用的都为原始的表格,没有经过预处理。
1.2.1 使用常数填补缺失值
调用 fillna() 方法,使用一个常数对数据表中所有的缺失值进行填补。
# 包的导入 import pandas as pd import numpy as np # 读取数据 data = pd.read_excel('../../监测点C逐小时污染物浓度与气象实测数据.xlsx') # 使用 999 填补数据表中的所有缺失值 re = data.fillna(value=999) re
1.2.2 使用上一个或下一个非缺失值填补
调用 fillna() 方法,使用缺失值的上一个或下一个非缺失值对数据表中所有的缺失值进行填补。
由于湿度这一列第一行的数据为空,所以使用缺失值的下一行非缺失值对缺失的数据进行填补。
# 包的导入 import pandas as pd import numpy as np # 读取数据 data = pd.read_excel('../../监测点C逐小时污染物浓度与气象实测数据.xlsx') # 使用缺失值的下一行非缺失值填补数据表中的所有缺失值 re = data.fillna(method='bfill', axis=0) re