当前位置:   article > 正文

Python数据预处理

python数据预处理


一、熟悉数据

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

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

  1. import pandas as pd
  2. database=pd.read_csv('../data/order_train2.csv')#导入数据
  3. 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。

  1. database.isnull()#数据量少时
  2. 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数据中的各列值的均值作为参数,进行数据填充,代码及结果如下:

  1. import pandas as pd
  2. df=pd.read_csv('data.csv')#导入数据
  3. 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。

  1. import pandas as pd
  2. database=pd.read_csv('../data/order_train2.csv')#导入数据
  3. #查看重复值记录
  4. database[database.duplicated()]
  5. #重复值记录总数
  6. database.duplicated().sum()

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

        关键技术: drop_duplicates0方法

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

  1. #在原表上删除重复值
  2. database.drop_duplicates(inplace=True)
  3. #重置索引
  4. database.index=range(database.shape[0])

四、异常值的检测与处理

 1.检测异常值

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

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

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

 2.处理异常值

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

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

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

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

         (1)删除异常值

        关键技术: drop()方法

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

五、数据类型转换

          关键技术:astype函数

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

六、索引设置

        Pandas库中索引的作用如下

(1)更方便地查询数据

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

1.添加索引

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

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

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

2.更改索引 

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

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

  1. import pandas as pd
  2. df=pd.read_csv("work.csv",sep=",",encoding="gbk")
  3. 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()方法

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

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

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

语文数学英语
stu111010599
stu310588115
sty5109120130

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

七、其他

1、大小写转换

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

2、数据修改与替换

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

onetwothree
a135
b789
c121518

        关键技术:insert()方法

  1. import pandas as pd
  2. #创建DataFrame数据对象
  3. data=[[1,3,5],[7,8,9],[12,15,181]
  4. index=['a','b','c']
  5. columns=['one','two','three']
  6. df=pd.DataFrame(data=data,index=index,columns=columns)
  7. #向df的最后增加一列
  8. #法1:直接对df赋值
  9. df1=df
  10. df1['four']=[9,10,24]
  11. df1
  12. #法2:使用loc方法增加
  13. df2=df
  14. df2.loc[:,'four']=[9,10,24]
  15. df2
  16. #使用insert方法在第一列与第三列之间插入
  17. 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()方法

  1. #按行增加数据
  2. import pandas as pd
  3. data=[[1,3,5],[7,8,9],[12,15,18]]
  4. index=['a','b','c']
  5. columns=['one','two','three']
  6. df=pd.DataFrame(data=data,index=index,columns=columns)
  7. df.loc['d']=[9,10,11]
  8. df
  9. #使用append方法增加多行数据
  10. #将增加的数据创建为df_insert
  11. data_insert=[[1,2,3],[4,5,6],[7,8,9]]
  12. index_insert=['e','f','g']
  13. columns_insert=['one','two','three']
  14. df_insert=pd.DataFrame(data=data_ingert,index=index_insert,columng=columns_insert)
  15. #将新数据添加到df数据中得到df2
  16. df2=df.append(df_insert)
  17. df2

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

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

  1. #按行增加数据
  2. import pandas as pd
  3. data=[[1,3,5],[7,8,9],[12,15,18]]
  4. index=['a','b','c']
  5. columns=['one','two','three']
  6. df=pd.DataFrame(data=data,index=index,columns=columns)
  7. #法1:使用loc()
  8. df.loc['c']=[10,20,30]
  9. #法2:使用iloc()
  10. 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. #按列删除数据
  2. #1、构建数据
  3. data=[[0,8,-2,1],[2,10,-4,2],[4,12,-6,3],[9,10,11,12]]
  4. index=['a','b','c','d']
  5. columns=['one','two','three','four']
  6. df=pd.DataFrame(data=data,index=index,columns=columns)
  7. df
  8. #删除第四列数据,按列删除,将drop方法的axis参数设置为1
  9. dfl=df.drop(labels='four',axis=1)
  10. df2
  11. #删除列,也可以直接设置drop方法中的columns参数
  12. df2=df.drop(columns='four')
  13. df2

        (2)按行删除数据

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

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

  1. #按行删除
  2. #方法一:设置index参数
  3. df3=df.drop(index='d')
  4. df3
  5. #方法2:设置labels参数
  6. df4=df.drop(labels='d',axis=0)
  7. df4

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/628522
推荐阅读
相关标签
  

闽ICP备14008679号