Python数据预处理

本文详细介绍了使用Python的Pandas库进行数据探索和预处理的各个环节,包括数据表的基本信息查看、大小和格式检查,缺失值、重复值的检测与处理,异常值识别,数据类型转换,以及索引设置、大小写转换和数据增删操作。
摘要由CSDN通过智能技术生成


一、熟悉数据

1.数据表的基本信息查看       

        关键技术:使用info0方法查看数据基本类型在该例中,首先使用pandas库中的read csv方法导入sales.csv文件,然后使用info0方法,查看数据的基本信息,代码及输出结果如下: 

import pandas as pd
database=pd.read_csv('../data/order_train2.csv')#导入数据
database.info()

 2.查看数据表的大小

        关键技术:使用pandas库中DataFrame对象的shape()方法,输出行数列数。 

database.shape()

 3.数据格式的查看

(1)数据类型查看

        关键技术:type()方法

type(database)

  

(2)查看数据类型是字符串还是数字格式

        关键技术:dtype属性和dtypes属性,对于series数据可以用dtype查看,对于dataframe数据可以用dtypes查看

database.dtypes

 4、查看具体的数据分布

        在进行数据分析时,常常需要对对数据的分布进行初步分析,包括统计数据中各元素的个数,均值、方差、最小值、最大值和分位数。

        关键技术:describe0函数。在做数据分析时,常常需要了解数据元素的特征describe0函数可以用于描述数据统计量特征,其返回值count表示、mean表示数据的平均值、std表示数据的标准差、min表示数据的最小值、max表示数据的最大值、25%、50%、75%分别表示数据的一分位、二分位、三分位数。

database.describe()

二、缺失值处理

1.缺失值检查

        关键技术:isnull0方法。isnull0函数返回值为布尔值,如果数据存在缺失值,返回True;否则,返回False。

database.isnull()#数据量少时
database.isnull().sum().sort_values(ascending=False).reset_index()#数据量多时

2.缺失值删除 

         关键技术:dropna0方法。dropna()方法用于删除含有缺失值的行

database.dropna()

        当某行或某列值都为NaN时,才删除整行或整列。

        关键技术:dropna0方法的how参数

database.dropna(how='all',axis=0) #当整行都为Nan值时删除整行

        当某行有一个数据为NaN时,就删除整行和当某列有一个数据为NaN时就删除整列。

        关键技术: dropna(方法的how参数dropna(how=any’)。

database.dropna(how='any',axis=0) #当整行至少存在一个Nan值时删除整行

3、缺失值替换/填充

        对于数据中缺失值的处理,除了进行删除操作外,还可以进行替换和填充操作如均值填补法,近邻填补法,插值填补法,等等。本小节介绍填充缺失值的fillna()方法。

        (1)[例]在df数据中,利用各列值的均值填补缺失数据,该如何用Python实现?

        关键技术: df.fillna()方法

        在该案例中,将df数据中的各列值的均值作为参数,进行数据填充,代码及结果如下:

import pandas as pd
df=pd.read_csv('data.csv')#导入数据
df.fillna(df.mean())

         (2)[例]使用近邻填补法,即利用缺失值最近邻居的值来填补数据,对df数据中的缺失值进行填补,这种情况该如何实现?

        关键技术: fillna()方法中的method参数

        在本案例中,可以将fillna()方法的method参数设置为bfill,来使用缺失值后面的数据进行填充。代码及运行结果如下:

df.fillna(method='bfill')

        (3)[例]若使用缺失值前面的值进行填充来填补数据,这种情况又该如何实现?

        本案例可以将fillna()方法的method参数设置设置为ffill,来使用缺失值前面的值进行填充。代码及运行结果如下:

df.fillna(method='ffill')

        (4)[例]请利用二次多项式插值法对df数据中item2列的缺失值进行填充

        关键技术: interpolate方法及其order参数。

        在该案例中,将interpolate方法中的参数order设置为2即可满足要求。具体代码及运行结果如下: 

df['item2'].interpolate(method="polynomial",order=2)

         (5)[例]请使用Python完成对df数据中item2列的三次样条插值填充

        关键技术:三次样条插值,即利用一个三次多项式来逼近原目标函数,然后求解该三次多项式的极小点来作为原目标函数的近似极小点。

        在该案例中,将interpolate方法的method参数设置为spline,将order参数设置为3。具体代码及运行结果如下:

df['item2'].interpolate(method="spline",order=3)

三、重复值处理

1、发现重复值

        在数据的采集过程中,有时会存在对同一数据进行重复采集的情况,重复值的存在会对数据分析的结果产生不良影响,因此在进行数据分析前,对数据中的重复值进行处理是十分必要的。

        (1)(例]请使用Python检查database数据中的重复值

        关键技术: duplicated方法。

        利用duplicated()方法检测冗余的行或列,默认是判断全部列中的值是否全部重复,并返回布尔类型的结果。对于完全没有重复的行,返回值为False。对于有重复值的行,第一次出现重复的那一行返回False,其余的返回True。

import pandas as pd
database=pd.read_csv('../data/order_train2.csv')#导入数据

#查看重复值记录
database[database.duplicated()]

#重复值记录总数
database.duplicated().sum()

         (2)[例]在上例对database数据检查出重复值的基础上,该如何利用Python对重复数据进行删除。

        关键技术: drop_duplicates0方法

        利用duplicates()方法去除几余数据,即删除几余的所有行,默认是判断全部列程序代码

#在原表上删除重复值
database.drop_duplicates(inplace=True)

#重置索引
database.index=range(database.shape[0])

四、异常值的检测与处理

 1.检测异常值

        关键技术:query方法和boxplot方法

        首先使用pandas库中的query方法查询数据中是否有异常值。然后通过boxplot方法检测异常值。

import matplotlib.pyplot as plt
plt.boxplot(database['item_price'])

 2.处理异常值

        了解异常值的检测后,接下来介绍如何处理异常值。在数据分析的过程中,对异常值的处理通常包括以下3种方法:

(1)最常用的方式是删除

(2)将异常值当缺失值处理,以某个值填充

(3)将异常值当特殊情况进行分析,研究异常值出现的原因

         (1)删除异常值

        关键技术: drop()方法

#删除
database.drop(database.index[[527681,528460]],inplace=True)
#重置索引
database.index=range(database.shape[0])

五、数据类型转换

          关键技术:astype函数

import numpy as np
arr=np.arange(1,5,0.5)
arr1=arr.astype(np.int) #将浮点型转换为整数型

六、索引设置

        Pandas库中索引的作用如下

(1)更方便地查询数据

(2)使用索引可以提升查询性能

1.添加索引

        [例]创建数据为[1,2,3,4,5]的Series,并指定索引标签为[a,b,c,d,e]

        关键技术:index方法设置索引

import pandas as pd
s=pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])

2.更改索引 

         [例]某公司销售数据集“work.csv”内容如下,请设定日期为索引,并用Python实现。

        关键技术:set index0函数,可以指定某一字段为索引。

import pandas as pd
df=pd.read_csv("work.csv",sep=",",encoding="gbk")
df1=df.set_index('日期') #将df的索更改为‘日期’列

        在该案例中,除了可以用set index方法重置索引外,还可以在导入csv文件的过程中,设置index col参数重置索引

df=pd.read_csv("work.csv",sep=",",encoding="gbk",index_col='日期')

3.重命名索引 

         [例]构建series对象,其数据为[88,60,751,对应的索引为[1,231。请利用Python对该series对象重新设置索引为[1,2,3,4,5]。

        关键技术:reindex()方法

import pandas as pd
#创建series对象
s1=pd.Series([88,60,75],index=[1,2,3])
#重新设置s1的索引
s2=s1.reindex([1,2,3,4,5])

        从运行结果中可以看出,对s1索引重置后,数据中出现了缺失值。若要对这些缺失值进行填补,可以设置reindex(方法中的method参数,method参数表示重新设置索引时,选择对缺失数据插值的方法。可以设置为None、bfill(向后填充) 、ffil(向前填充)等。 

        [例]通过二维数组创建如下所示的成绩表,并重置其行索引为数学stu1,stu2,stu3,stu4,stu5,重置其列索引为[语文,物理,数学]。

语文数学英语
stu111010599
stu310588115
sty5109120130

import pandas as pd
#通过对data,index和columns的构建,得到DataFrame对象
dfda=[[110,105,99],[105,88,115],[109,120,130]]
index=['stul','stu3','stu5']
columns=[ '语文','英语','数学']
df=pd.DataFrame(data=data,index=index,columns=columns)
df.reindex(index=['stul','stu2','stu3','stu4','stu5'],columns=['语文','物理','数学'])
df

七、其他

1、大小写转换

        在数据分析中,有时候需要将字符串中的字符进行大小写转换。在Python中可以使用lower0方法,将字符串中的所有大写字母转换为小写字母。也可以使用upper0方法,将字符串中的所有小写字母转换为大写字母。

2、数据修改与替换

        (1)按列增加数据
        [例]请创建如下所示的DataFrame数据,并利用Python对该数据的最后增加列数据,要求数据的列索引为“four’,数值为[9,10,24]。若要在该数据的two’列和“three’列之间增加新的列,该如何操作?

onetwothree
a135
b789
c121518

        关键技术:insert()方法

import pandas as pd
#创建DataFrame数据对象
data=[[1,3,5],[7,8,9],[12,15,181]
index=['a','b','c']
columns=['one','two','three']
df=pd.DataFrame(data=data,index=index,columns=columns)

#向df的最后增加一列
#法1:直接对df赋值
df1=df
df1['four']=[9,10,24]
df1

#法2:使用loc方法增加
df2=df
df2.loc[:,'four']=[9,10,24]
df2

#使用insert方法在第一列与第三列之间插入
df.insert(2,'four',[9,10,24])

        (2)按行增加数据
        [例]对于上例中的DataFrame数据,增加一行数据,数据行的索引为“d”数值为[9,10,11],请使用Python实现。若要向df数据中再增加三行数据,索引分别为“e”,“g”,数值分别为[1,2,3],[4,5,6],[7,8,9],在Python中该如何实现?

        关键技术:loc()方法和append()方法

#按行增加数据
import pandas as pd
data=[[1,3,5],[7,8,9],[12,15,18]]
index=['a','b','c']
columns=['one','two','three']
df=pd.DataFrame(data=data,index=index,columns=columns)
df.loc['d']=[9,10,11]
df

#使用append方法增加多行数据
#将增加的数据创建为df_insert
data_insert=[[1,2,3],[4,5,6],[7,8,9]]
index_insert=['e','f','g']
columns_insert=['one','two','three']
df_insert=pd.DataFrame(data=data_ingert,index=index_insert,columng=columns_insert)
#将新数据添加到df数据中得到df2
df2=df.append(df_insert)
df2

        如要将第三行数据替换为[10,20,30]

        关键技术:loc()方法和iloc()方法

#按行增加数据
import pandas as pd
data=[[1,3,5],[7,8,9],[12,15,18]]
index=['a','b','c']
columns=['one','two','three']
df=pd.DataFrame(data=data,index=index,columns=columns)

#法1:使用loc()
df.loc['c']=[10,20,30]

#法2:使用iloc()
df.iloc[2,:]=[10,20,30]

3、数据删除

        (1)按列删除数据
        [例]请构建如下DataFrame数据并利用Python删除下面DataFrame实例的第四列数据。
        关键技术:该案例中,使用DataFrame的drop0方法,删除数据中某一列。drop0方法的参数说明如下:

labels:表示行标签或列标签

axis: axis=0,表示按行删除,axis=1,表示按列删除。默认值为0

index:删除行,默认为None

columns:删除列,默认为None

inplace: 可选参数,对原数组作出修改并返回一个新数组。默认是False,果为True,那么原数组直接被替换

#按列删除数据
#1、构建数据
data=[[0,8,-2,1],[2,10,-4,2],[4,12,-6,3],[9,10,11,12]]
index=['a','b','c','d']
columns=['one','two','three','four']
df=pd.DataFrame(data=data,index=index,columns=columns)
df

#删除第四列数据,按列删除,将drop方法的axis参数设置为1
dfl=df.drop(labels='four',axis=1)
df2

#删除列,也可以直接设置drop方法中的columns参数
df2=df.drop(columns='four')
df2

        (2)按行删除数据

        [例]对于上例中的DataFrame数据,请利用Python删除下面DataFrame实例的第四行数据

        关键技术:本案例可通过设置drop0方法的index参数,label参数实现

#按行删除
#方法一:设置index参数
df3=df.drop(index='d')
df3

#方法2:设置labels参数
df4=df.drop(labels='d',axis=0)
df4

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值