先导入需要的模块
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( )
<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 ( )
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. dropna( axis= 0 , how= 'all' , inplace= True )
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. dropna( axis= 1 , how= 'all' , inplace= True )
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 )
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' )
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' )
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 )
data
A B C 0 40 4 2 1 66 88 33 2 16 5 7 4 22 99 20