<>数据分析之数据处理(一)

<>一、缺失值处理

* 数据确实是主要包括记录缺失和字段信息缺失等情况,其对数据分析会有较大的影响,导致结果不确定性更加显著
* 缺失值的处理:删除记录/数据插补/不处理 import warnings warnings.filterwarnings('ignore')
import numpy as np import pandas as pd import matplotlib.pyplot as plt from
scipyimport stats # %matplotlib inline # step 1 创建数据 s=pd.Series([12,33,45,23,np
.nan,np.nan,66,54,np.nan,99]) df=pd.DataFrame({'value1':[12,33,45,23,np.nan,np.
nan,66,54,np.nan,99,190], 'value2':['a','b','c','d','e',np.nan,np.nan,'f','g',np
.nan,'g']}) print('\n*******s*******\n',s) print('\n*******df*******\n',df)
运行结果

#step 2 判断是否有缺失值数据:isnull notnull # isnull (缺失值为true,非缺失值为false) #
notnull(缺失值为false,非缺失值为true) print('*******Series********\n',s.isnull())
#Series直接判断是否是缺失值,返回一个series print('*******Dataframe********\n',df.notnull())
#Dataframe直接判断是否是缺失值返回一个series print('*******Value1********\n',df['value1'].
notnull())#通过索引判断
运行结果

# step 3 筛选非缺失值 s2=s[s.isnull()==False] df2=df[df['value2'].notnull()] print(
'\n*******s2*******\n',s2) print('\n*******df2*******\n',df2)
运行结果

# step 4 删除缺失值-dropna s.dropna(inplace=True) df2=df['value1'].dropna() print(
'\n*******s删除缺失值*******\n',s) print('\n*******df删除缺失值*******\n',df2)
注:drop方法可以直接用于series和dataframe,inplace参数默认为false(生成新的值)

运行结果

# step 5 填充缺失数据——fillna # 在缺失值还没有删除之前进行 #
fillna(value=None,method=None,axis=None,inplace=True,linit=None,downcast=None,**kwargs)
value 表示填充值 s.fillna(0,inplace=True) print('\n*******s填充缺失数据*******\n',s)
#pad/ffill表示用之前的数据填充,backfill/bfill表示用之后的数据填充 df['value1'].fillna(method='pad',
inplace=True) print('\n*******df填充缺失数据*******\n',df)
运行结果

# step 6 替换缺失数据——replace #
replace(to_replace=None,value=None,inplace=False,limit=None,regex=False,method='pad',axis=None)to_replace表示被替换的值,value表示替换值
s= pd.Series([1,1,2,2,3,4,5,np.nan,np.nan,66,54,np.nan,99])s.replace(np.nan,
'缺失数据',inplace=True) print('\n*******s替换缺失数据*******\n',s) s.replace([1,2,3],np.
nan,inplace=True)#多值用nan代替 print('\n*******s多值替换缺失数据*******\n',s)
运行结果

# step 7 缺失值插补:均值/中位数/众数插补,临近插补,插值法 # (1)均值、中位数、众数插补 s = pd.Series([1,2,3,np.
nan,3,4,5,5,np.nan,6,7,2,np.nan,3,4])# 创建数据 print('*******s*******\n',s) #
分别求出均值、中位数、众数 u=s.mean()#均值 me=s.median()#中位数 mod=s.mode()#众数 print(
'\n均值为:%.2f, 中位数为:%.2f' % (u,me)) print('\n众数为:', mod.tolist()) s.fillna(u,
inplace=True) print('\n*******均值填充*******\n',s)
运行结果

# (2)临近值插补 s = pd.Series([1,2,3,np.nan,3,4,5,5,np.nan,np.nan,6,6,7,12,2,np.nan,
3,4])#创建数据 # print('*******s*******\n',s) s.fillna(method='ffill',inplace=True)
print('\n*******临近值插补*******\n',s)#用前置插补
运行结果

from scipy.interpolate import lagrange # (3)插值法——拉格朗日插值法 x=[3,6,9] y=[10,8,4]
print(lagrange(x,y)) print(type(lagrange(x,y))) #
type的输出值为的是多项式的n个系数,这里输出3个值,分别为a0,a1,a2 # y = a0 * x**2 + a1 * x + a2 → y =
-0.1111* x**2 + 0.3333* x + 10 print('\n插值为:%.2f'%lagrange(x,y)(10))
运行结果

自学自用,希望可以和大家积极沟通交流,小伙伴们加油鸭,如有错误还请指正,不喜勿喷

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信