标签:reference false reset dict bar ati possible 字典 body
数据预处理之缺失值&重复值
import pandas as pd
import numpy as np
1 缺失值处理
data = pd.DataFrame({‘A‘:[40,np.nan,16,22,8,44],
‘B‘:[88,np.nan,66,np.nan,99,np.nan,],
‘C‘:[2,np.nan,4,np.nan,np.nan,6]})
data
|
A |
B |
C |
0 |
40.0 |
88.0 |
2.0 |
1 |
NaN |
NaN |
NaN |
2 |
16.0 |
66.0 |
4.0 |
3 |
22.0 |
NaN |
NaN |
4 |
8.0 |
99.0 |
NaN |
5 |
44.0 |
NaN |
6.0 |
data.info() # 查看data的信息
<class ‘pandas.core.frame.DataFrame‘>
RangeIndex: 6 entries, 0 to 5
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 A 5 non-null float64
1 B 3 non-null float64
2 C 3 non-null float64
dtypes: float64(3)
memory usage: 272.0 bytes
data.isnull().sum() # 也可这样查看data每一行的缺失值个数
A 1
B 3
C 3
dtype: int64
1.1 删除缺失值
官方文档
dropna(axis=0, how=‘any‘, thresh=None, subset=None, inplace=False)
- 参数axis指轴,axis=0时表示按行,axis=1表示按列;
- 参数how=‘any‘时表示只要某行包含缺失值就丢弃,how=‘all‘时表示某行全部为缺失值才丢弃;
- 参数thresh用来指定保留包含几个非缺失值数据的行;
- 参数subset用来指定在判断缺失值时只考虑哪些列;
- 参数inplace=False时表示在副本上修改,inplace=True时表示在原对象上修改。
data.dropna(axis=0, how=‘any‘, inplace=True) # 删除data中存在缺失值的行
data
|
A |
B |
C |
0 |
40 |
88.0 |
2.0 |
2 |
16 |
66.0 |
4.0 |
data.dropna(axis=0, how=‘all‘, inplace=True) # 删除data中全部为缺失值的行
data
|
A |
B |
C |
0 |
40 |
88.0 |
2.0 |
2 |
16 |
66.0 |
4.0 |
3 |
22 |
NaN |
NaN |
4 |
8 |
99.0 |
NaN |
5 |
44 |
NaN |
6.0 |
data.dropna(axis=1, how=‘any‘, inplace=True) # 删除data中存在缺失值的列
data
data.dropna(axis=1, how=‘all‘, inplace=True) # 删除data中全部为缺失值的列
data
|
A |
B |
C |
0 |
40 |
88.0 |
2.0 |
1 |
NaN |
NaN |
NaN |
2 |
16 |
66.0 |
4.0 |
3 |
22 |
NaN |
NaN |
4 |
8 |
99.0 |
NaN |
5 |
44 |
NaN |
6.0 |
1.2 填充缺失值
1.2.1 使用均值填充
均值mean,众数mode,中值median
data.C[data.C.isnull()] = data.C.mean()
data
|
A |
B |
C |
0 |
40 |
88.0 |
2.0 |
1 |
NaN |
NaN |
4.0 |
2 |
16 |
66.0 |
4.0 |
3 |
22 |
NaN |
4.0 |
4 |
8 |
99.0 |
4.0 |
5 |
44 |
NaN |
6.0 |
1.2.2 使用 fillna 函数填充
官方文档
fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None) # 使用指定的方法填充NA/NaN值
- 参数value指用来填充Na/NaN的值,可以是标量、字典、数组、数据框,不能是列表;
- 参数method指填充的方法{‘backfill‘, ‘bfill‘, ‘pad‘, ‘ffill‘, None},默认None,backfill、bfill使用后一个非缺失值填充,pad、ffill使用前一个非缺失值填充;
- 参数axis=0时表示按行填充,axis=1表示按列填充;
- 参数inplace=False时表示在副本上修改,inplace=True时表示在原对象上修改。
- 参数limit表限制被填充的个数,默认为None。
- 参数downcast : dict, default is None. A dict of item->dtype of what to downcast if possible, or the string ‘infer‘ which will try to downcast to an appropriate equal type (e.g. float64 to int64 if possible).
data.fillna(0) # 使用0填充缺失值
|
A |
B |
C |
0 |
40 |
88.0 |
2.0 |
1 |
0 |
0.0 |
0.0 |
2 |
16 |
66.0 |
4.0 |
3 |
22 |
0.0 |
0.0 |
4 |
8 |
99.0 |
0.0 |
5 |
44 |
0.0 |
6.0 |
data.fillna(value={‘A‘:11, ‘B‘:22, ‘C‘:66}) # 使用字典填充
|
A |
B |
C |
0 |
40 |
88.0 |
2.0 |
1 |
11 |
22.0 |
66.0 |
2 |
16 |
66.0 |
4.0 |
3 |
22 |
22.0 |
66.0 |
4 |
8 |
99.0 |
66.0 |
5 |
44 |
22.0 |
6.0 |
data.fillna(method=‘ffill‘) # pad。使用前一个非缺失值填充
|
A |
B |
C |
0 |
40 |
88.0 |
2.0 |
1 |
40 |
88.0 |
2.0 |
2 |
16 |
66.0 |
4.0 |
3 |
22 |
66.0 |
4.0 |
4 |
8 |
99.0 |
4.0 |
5 |
44 |
99.0 |
6.0 |
data.fillna(method=‘bfill‘) # backfill。使用后一个非缺失值填充
|
A |
B |
C |
0 |
40 |
88.0 |
2.0 |
1 |
16 |
66.0 |
4.0 |
2 |
16 |
66.0 |
4.0 |
3 |
22 |
99.0 |
6.0 |
4 |
8 |
99.0 |
6.0 |
5 |
44 |
NaN |
6.0 |
data.fillna(100, limit=1) # 限制填充的个数
|
A |
B |
C |
0 |
40 |
88.0 |
2.0 |
1 |
100 |
100.0 |
100.0 |
2 |
16 |
66.0 |
4.0 |
3 |
22 |
NaN |
NaN |
4 |
8 |
99.0 |
NaN |
5 |
44 |
NaN |
6.0 |
data.A.fillna(999) # 部分数据填充
0 40
1 999
2 16
3 22
4 8
5 44
Name: A, dtype: object
1.2.3 使用 interpolate 函数填充
官方文档
interpolate(method="linear",axis=0,limit=None,inplace=False,limit_direction="forward",limit_area=None,downcast=None)
- 参数method指填充的方式{‘linear‘, ‘time‘, ‘index‘, ‘values‘,‘spline‘, ‘pad‘, ‘nearest‘, ‘zero‘, ‘slinear‘, ‘quadratic‘, ‘cubic‘, ‘spline‘, ‘barycentric‘, ‘polynomial‘, ‘krogh‘, ‘piecewise_polynomial‘, ‘spline‘, ‘pchip‘, ‘akima‘, ‘from_derivatives‘},默认linear,
- linear:线性插值填充,用缺失值的前一个有效值和后一个有效值建立插值直线,使用缺失点在线性插值韩函数的函数值进行填充。
·slinear、polynomial:线性插值,需要设置对应的order参数,代表所使用方法的逼近次数。polynomial代表多项式插值,将order参数设置为2,代表使用二次多项式插值。
- nearest:最邻近插值法。
- zero:阶梯插值。
- quadratic、cubic:2、3阶B样条曲线插值。
- 参数axis=0时表示按行,axis=1表示按列;
- 参数limit表限制被填充的个数,默认为None;
- 参数inplace=False时表示在副本上修改,inplace=True时表示在原对象上修改;
- 参数limit_direction指定填充的方向{‘forward‘, ‘backward‘, ‘both‘},默认为forward;
- 参数limit_area指定限制{None, ‘inside‘, ‘outside‘},默认None,inside仅填充被有效值包围的缺失值(interpolate),outside仅填充有效值之外的缺失值(extrapolate)
data.interpolate(method=‘linear‘) # 线性插值
|
A |
B |
C |
0 |
40 |
88.0 |
2.000000 |
1 |
NaN |
77.0 |
3.000000 |
2 |
16 |
66.0 |
4.000000 |
3 |
22 |
82.5 |
4.666667 |
4 |
8 |
99.0 |
5.333333 |
5 |
44 |
99.0 |
6.000000 |
data[‘C‘].interpolate(method=‘polynomial‘, order=2) # 使用二次多项式插值
0 2.000000
1 3.066667
2 4.000000
3 4.800000
4 5.466667
5 6.000000
Name: C, dtype: float64
2 重复值处理
data = pd.DataFrame({‘A‘:[40,66,16,22,66],
‘B‘:[4,88,5,99,88],
‘C‘:[2,33,7,20,33]})
data
|
A |
B |
C |
0 |
40 |
4 |
2 |
1 |
66 |
88 |
33 |
2 |
16 |
5 |
7 |
3 |
22 |
99 |
20 |
4 |
66 |
88 |
33 |
2.1 查看重复值
data[data.duplicated()] # 查看重复值
2.2 删除重复值
data.drop_duplicates(inplace=True) # 丢弃重复值
data
|
A |
B |
C |
0 |
40 |
4 |
2 |
1 |
66 |
88 |
33 |
2 |
16 |
5 |
7 |
3 |
22 |
99 |
20 |
2.3 重置索引
# 重置索引
data.reset_index(drop=True, inplace=True) # drop=True表删除原索引
data
|
A |
B |
C |
0 |
40 |
4 |
2 |
1 |
66 |
88 |
33 |
2 |
16 |
5 |
7 |
4 |
22 |
99 |
20 |
数据预处理之缺失值&重复值
标签:reference false reset dict bar ati possible 字典 body
原文地址:https://www.cnblogs.com/yang9165/p/12877762.html