学
目录
1.数据表的基本信息查看
2.查看数据表的大小
3.数据格式的查看
4、查看具体的数据分布
二、缺失值处理
1.缺失值检查
2.缺失值删除
3、缺失值替换/填充
三、重复值处理
1、发现重复值
四、异常值的检测与处理
1.检测异常值
2.处理异常值
五、数据类型转换
六、索引设置
1.添加索引
2.更改索引
3.重命名索引
七、其他
1、大小写转换
2、数据修改与替换
3、数据删除
一、熟悉数据
关键技术:使用info0方法查看数据基本类型在该例中,首先使用pandas库中的read csv方法导入sales.csv文件,然后使用info0方法,查看数据的基本信息,代码及输出结果如下:
import pandas as pd
database=pd.read_csv('../data/order_train2.csv')#导入数据
database.info()
关键技术:使用pandas库中DataFrame对象的shape()方法,输出行数列数。
database.shape()
(1)数据类型查看
关键技术:type()方法
type(database)
(2)查看数据类型是字符串还是数字格式
关键技术:dtype属性和dtypes属性,对于series数据可以用dtype查看,对于dataframe数据可以用dtypes查看
database.dtypes
在进行数据分析时,常常需要对对数据的分布进行初步分析,包括统计数据中各元素的个数,均值、方差、最小值、最大值和分位数。
关键技术:describe0函数。在做数据分析时,常常需要了解数据元素的特征describe0函数可以用于描述数据统计量特征,其返回值count表示、mean表示数据的平均值、std表示数据的标准差、min表示数据的最小值、max表示数据的最大值、25%、50%、75%分别表示数据的一分位、二分位、三分位数。
database.describe()
关键技术:isnull0方法。isnull0函数返回值为布尔值,如果数据存在缺失值,返回True;否则,返回False。
database.isnull()#数据量少时
database.isnull().sum().sort_values(ascending=False).reset_index()#数据量多时
关键技术: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值时删除整行
对于数据中缺失值的处理,除了进行删除操作外,还可以进行替换和填充操作如均值填补法,近邻填补法,插值填补法,等等。本小节介绍填充缺失值的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)(例]请使用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])
关键技术:query方法和boxplot方法
首先使用pandas库中的query方法查询数据中是否有异常值。然后通过boxplot方法检测异常值。
import matplotlib.pyplot as plt
plt.boxplot(database['item_price'])
了解异常值的检测后,接下来介绍如何处理异常值。在数据分析的过程中,对异常值的处理通常包括以下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,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'])
[例]某公司销售数据集“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='日期')
[例]构建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,重置其列索引为[语文,物理,数学]。
语文 | 数学 | 英语 | |
stu1 | 110 | 105 | 99 |
stu3 | 105 | 88 | 115 |
sty5 | 109 | 120 | 130 |
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
在数据分析中,有时候需要将字符串中的字符进行大小写转换。在Python中可以使用lower0方法,将字符串中的所有大写字母转换为小写字母。也可以使用upper0方法,将字符串中的所有小写字母转换为大写字母。
(1)按列增加数据
[例]请创建如下所示的DataFrame数据,并利用Python对该数据的最后增加列数据,要求数据的列索引为“four’,数值为[9,10,24]。若要在该数据的two’列和“three’列之间增加新的列,该如何操作?
one | two | three | |
a | 1 | 3 | 5 |
b | 7 | 8 | 9 |
c | 12 | 15 | 18 |
关键技术: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]
(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