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

33 篇文章 19 订阅
33 篇文章 25 订阅

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

一、缺失值处理

  • 数据确实是主要包括记录缺失和字段信息缺失等情况,其对数据分析会有较大的影响,导致结果不确定性更加显著
  • 缺失值的处理:删除记录/数据插补/不处理
import warnings
warnings.filterwarnings('ignore')
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import 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))

运行结果
在这里插入图片描述
自学自用,希望可以和大家积极沟通交流,小伙伴们加油鸭,如有错误还请指正,不喜勿喷

  • 10
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柚子味的羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值