python的主要预处理函数

学习数据分析的基本过程之后,根据数据的不同情况,会采取不同的数据预处理函数,在python中有多种机器学习和数据处理的第三方库,在这些库中也有不同的数据预处理函数,其中pandas时python的一个数据分析包,pandas时基于numpy构建的含有更高级数据结构和工具包的数据分析包。

1、python的数据结构

# _*_ coding:utf _*_
# 邮箱:3195841740@qq.com
# 人员:21292
# 日期:2020/2/10 21:49
# 工具:PyCharm

from  pandas import Series,DataFrame
#Series是一类似一维的数组对象。Series对象主要有两个属性:索引的INDEX和数据values,如果传递的构造器的是一个列表,则index的值从0递增,如果传递的是一个类字典的键值对结构,就会生成index-value对应的Series
s = Series([1,2,3.0,'abc','def'])
print(s)
print("------------------------------------------------------------")
#也可以直接传入索引
s = Series([1,2,3.0,'abc','def'],index = [10,20,30,40,50])
print(s)
print("------------------------------------------------------------")
print(s[20])
print("------------------------------------------------------------")
#DataFrame类似于一个表格,类似电子表格的数据结构,包含一个经过排序的列表集,每一个都可以有不同的类型值(数字,字符串,布尔)
data = {'id':[100,101,102,103,104],'name' : ['aa','bb','cc','dd','ee'],'age':[18,19,20,19,18]}
data1 = DataFrame(data)
print(data1)
print("------------------------------------------------------------")
data = {'id':[100,101,102,103,104],'name' : ['aa','bb','cc','dd','ee'],'age':[18,19,20,19,18]}
data1 = DataFrame(data,index = ['one','two','three','four','five'])
print(data1)


2、数据缺失处理函数

数据缺失在大部分数据分析应用中很常见,pandas使用浮点值NAN表示浮点和非浮点数组中缺失的数据,python内置的None值也会被当作NA处理

# _*_ coding:utf _*_
# 邮箱:3195841740@qq.com
# 人员:21292
# 日期:2020/2/10 22:20
# 工具:PyCharm
from pandas import Series,DataFrame,np
from numpy import  nan as NA

data = Series([1,2,None,34,NA,68])
print(data)
print("------------------------------------------------------------")
#可以使用方法isnull来检测是否缺失值,这种方法对对象做出元素等级的应用,然后返回布尔型数组,一般可以用于布尔索引
print(data.isnull())
print("------------------------------------------------------------")
#数据过滤
#对于DataFrame类型的数据结构,如果过滤掉,至少要丢掉包含缺失值的一行或一列
#格式如下
#dropna(axis = 0,how = 'any',thresh = None)
#(1)axis = 0表示行,axis = 1表示列
#(2)how 参数可选的值为any或all ,all表示丢掉全为NA的行
#(3)thresh为整数类型,表示删除的条件,如thresh = 3,表示一行中至少有三个NA值时才将其保留
print(data.dropna())
print("------------------------------------------------------------")
data = DataFrame(np.random.randn(5,4))
data.loc[:2,1] = NA
data.loc[:3,2] = NA
print(data)
print("---删除后的结果---")
print(data.dropna(thresh=2))
print(data.dropna(thresh=3))
print("------------------------------------------------------------")

3、数据过滤

数据过滤就是将缺失数据过滤掉,不在考虑。

# _*_ coding:utf _*_
# 邮箱:3195841740@qq.com
# 人员:21292
# 日期:2020/2/10 22:20
# 工具:PyCharm
from pandas import Series,DataFrame,np
from numpy import  nan as NA

data = Series([1,2,None,34,NA,68])
print(data)
print("------------------------------------------------------------")
#可以使用方法isnull来检测是否缺失值,这种方法对对象做出元素等级的应用,然后返回布尔型数组,一般可以用于布尔索引
print(data.isnull())
print("------------------------------------------------------------")
#数据过滤
#对于DataFrame类型的数据结构,如果过滤掉,至少要丢掉包含缺失值的一行或一列
#格式如下
#dropna(axis = 0,how = 'any',thresh = None)
#(1)axis = 0表示行,axis = 1表示列
#(2)how 参数可选的值为any或all ,all表示丢掉全为NA的行
#(3)thresh为整数类型,表示删除的条件,如thresh = 3,表示一行中至少有三个NA值时才将其保留
print(data.dropna())
print("------------------------------------------------------------")
data = DataFrame(np.random.randn(5,4))
data.loc[:2,1] = NA
data.loc[:3,2] = NA
print(data)
print("---删除后的结果---")
print(data.dropna(thresh=2))
print(data.dropna(thresh=3))
print("------------------------------------------------------------")

4、数据填充

# _*_ coding:utf _*_
# 邮箱:3195841740@qq.com
# 人员:21292
# 日期:2020/2/10 22:59
# 工具:PyCharm
from pandas import Series,DataFrame,np
from numpy import nan as NA
#fillna(value,method,axis)
#value除了基本类型外,此外还可以使用字典,这样可以实现对不同列填充不同的值,axis = 0,表示行,axis = 1表示列,method表示采用的填补数值的方法,默认值时None
data = DataFrame(np.random.randn(5,4))
data.loc[:2,1] = NA
data.loc[:3,2] = NA
print(data)
print("---数据填充后的效果---")
print(data.fillna(0))
print("------------------------------------------------------------")
print("---字典数据填充效果---")
print(data.fillna({1:11,2:22}))

5、拉格朗日插值法

当数据缺失时,可以使用拉格朗日插值法对缺失值进行赋值

# _*_ coding:utf _*_
# 邮箱:3195841740@qq.com
# 人员:21292
# 日期:2020/2/11 12:38
# 工具:PyCharm

import pandas as pd
from pandas import Series,DataFrame,np
from numpy import nan as NA
from scipy.interpolate import lagrange

#当出现缺失值时,也可以使用拉格朗日插值法对缺失值进行插值
df = DataFrame(np.random.randn(20,2),columns=['first','second'])
df['first'][(df['first']<-1.5)|(df['first']>1.5)] = None
print(df)
#自定义列向量插值函数
def ployinterp_column(s,n,k = 5):
    y = s[list(range(n-k,n))+list(range(n+1,n+1+k))]#取数
    y = y[y.notnull()]
    return lagrange(y.index,list(y))(n)#插值并返回插值结果

for i in df.columns:
    for j in range(len(df)):
        if df[i].isnull:
            df[i][j] = ployinterp_column(df[i],j)

6、检测和过滤异常数值

# _*_ coding:utf _*_
# 邮箱:3195841740@qq.com
# 人员:21292
# 日期:2020/2/11 15:03
# 工具:PyCharm

from pandas import Series,DataFrame,np
from numpy import nan as NA

#找到异常值,对这些异常值根据具体情况进行过滤或变换运算
data = DataFrame(np.random.randn(10,4))
print(data)
print("------------------------------------------------------------")
print("---找出某一列中绝对值大于超过2的项-----")
data1 = data[2]
print(data1[np.abs(data1)] > 1)
data1[np.abs(data1)>1] = 100 #将这列所有大于1的数据修改为100
print("------------------------------------------------------------")
print(data1)#打印修改后的列表
print("------------------------------------------------------------")
print("----将每列中大于一的数据改为100")
for i in range(4):
    data[i][np.abs(data[i])>1] = 100

print(data)
print("------------------------------------------------------------")

7、移除重复数据

# _*_ coding:utf _*_
# 邮箱:3195841740@qq.com
# 人员:21292
# 日期:2020/2/11 15:15
# 工具:PyCharm
#在panads中使用duplicated方法发现重复值,使用drop_duplicated方法移除重复值
from pandas import Series,DataFrame,np
from numpy import nan as NA
import pandas as pd
import numpy as np
data = pd.DataFrame({'name':['zhang']*3+['wang']*4,'age' : [18,18,19,19,20,20,21]})
print(data)
print("------------------------------------------------------------")
print("----重复的内容是————")
print(data.duplicated())
print("------------------------------------------------------------")
print("---删除完重复值后----")
print(data.drop_duplicates())
print("------------------------------------------------------------")
#保留最后一个需要利用参数keep = 'last'
print("---输出新的列表----")
print(data.drop_duplicates(keep = 'last'))

8、数据规范化

# _*_ coding:utf _*_
# 邮箱:3195841740@qq.com
# 人员:21292
# 日期:2020/2/11 15:42
# 工具:PyCharm
import pandas as pd
import numpy as np

#datafile = 'ori_data.xls'
#data = pd.resd_excel(datafile,header = None)
data = pd.DataFrame(np.random.randn(10,4))
min_data = (data-data.min())/(data.max() - data.min())
zero_data = (data - data.mean())/data.std()
float_data = data/10**np.ceil(np.log10(data.abs().max()))
print("原始数据:'\n",data)
print("------------------------------------------------------------")
print("最小-最大规范化的数据:'\n",min_data)
print("------------------------------------------------------------")
print("零-均值规范化的数据:'\n",zero_data)
print("------------------------------------------------------------")
print("小数规范化的数据:'\n",float_data)

9、汇总和描述等统计量的计算

# _*_ coding:utf _*_
# 邮箱:3195841740@qq.com
# 人员:21292
# 日期:2020/2/11 15:53
# 工具:PyCharm

import pandas as pd
import numpy as np
from pandas import Series,DataFrame
df = DataFrame(np.random.randn(4,3),index=list('abcd'),columns = ['first','two','three'])
print("---打印原始数据----")
print(df)
print("------------------------------------------------------------")
print("---打印对数据的基本统计描述----")
print(df.describe())
print("---每列数据的和----")
print(df.sum())
print("---统计每行数据的和---")
print(df.sum(axis = 1))
print("---统计每列最小值所在的行---")
print(df.idxmin())
print("---统计每列最小值所在的列---")
print(df.idxmin(axis = 1))
print("---统计每列最大值所在的行---")
print(df.idxmax())
print("---统计每列最大值所在的列---")
print(df.idxmax(axis = 1))
print("---计算相对于上一行的累积结果---")
print(df.cumsum())
print("---计算方差---")
print(df.var())
print("---计算协方差---")
print(df.std())
print('----计算百分数变化----')
print(df.pct_change())
print("---计算二维协方差---")
print(df.cov())
print("---计算相关系数----")
print(df.corr())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小鱼子爱吃

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

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

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

打赏作者

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

抵扣说明:

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

余额充值