1、轴向堆叠数据 concat()函数
pd.concat(objs.axis=0,join=’outer’,ignore_index=False)
obj:用于连接的数据
axis:用于连接的轴向,0是纵向,1是横向
join:连接方式,inner是内连接,outer是左连接
ignore_index:清除现在索引并重置索引值
import pandas as pd
import numpy as np
df1=pd.DataFrame({'A':['A0','B0','A1'],'B':['B0','B0','B1']})
df1
df2=pd.DataFrame({'C':['C0','C0','C1','C3'],'D':['D0','D2','D2','D3']})
df2
#横向堆叠合并df1和df2,采用外连接的方式
pd.concat([df1,df2],axis=1,join='outer')
2、主键合并数据 merge()函数
通过一个或多个键将两个数据集的行链接来,类似于SQL中的join
pd.merge(left,right,how=’inner’,on=None,left_on=None,right_on=None)
left,ritht:用于合并的左/右侧的DataFrame对象
how:表示连接方式,默认是inner,可以选择outer,left,right
on:用于指定连接的列名,on可以指定多个列名
left_on/right_on:左/右侧数据用于连接的列名
info=pd.DataFrame({'产品编号':list('ABCD'),
'产品名称':['电视机','手机','电脑','空调'],
'品牌':['格力','康佳','海信','TCL']},index=range(1001,1005))
info
sale=pd.DataFrame({'产品编号':list('ABECDF'),
'品牌':['格力','康佳','海信','TCL','康佳','格力'],
'价格':[3600,1500,4500,2000,3000,2500]},
index=range(1001,1007))
sale
# 1、使用默认连接方式连接产品信息和产品销售数据集
pd.merge(info,sale)
# 2、分别用left、right、outer连接方式连接数据集
pd.merge(info,sale,how='left')
pd.merge(info,sale,how='right')
pd.merge(info,sale,how='outer')
# 3、按照指定“产品编号”列名合并产品信息和产品销售数据集
pd.merge(info,sale,on='产品编号')
# 4、根据“产品编号”和“品牌”多个键进行连接
pd.merge(info,sale,on=['产品编号','品牌'])
3.根据行索引合并数据 join()方法
通过索引或特定的列来连接多个DataFrame对象,默认的是通过index进行连接,也可以通过设置参数on来指定连接的列。
DataFrame.join(other,on=None,how=’left’,lsuffix=”,resuffix=”,sort=False)
other:表示参与连接的其他DataFrame。
on:用于指定连接的列名,on可以指定多个列名
how:数据连接方式,默认为left,可选inner,outer,right
lsuffix/rsuffix:接收字符串,用于在左右侧重叠的列名候添加后缀名
# 1、使用默认连接方式,左侧重复的列名添加后缀名“_1”
info.join(sale,lsuffix='_1'
# 2、使用外连接方式,右侧重复的列名添加后缀名“_2”
info.join(sale,rsuffix='_2',how='outer')
4、根据行索引合并数据combine_first()方法
DataFrame.combine_first(other) other:用于接收填充缺失值的DataFrame对象
使用innull()和notnull()函数可以判断数据集中是否存在空值和缺失值
对于缺失数据可以使用dropna()和fillna()方法对缺失值进行删除和填充
panda.innull(obj) 检测是否为空值 eg: pd.isnull(df1)
dropna(axis=0,how=’any’,subset=None,inpace=False) 删除缺失值
axis 确认过滤的行或列 1列 0行
how:过滤的标准,any:存在NaN值,则删除;all:所有值是NaN,删除
fillna(value=None,method=None,axis=None,inplace=False,limit=None)
value:用于填充的数值,可以指定空值填充,通过字典的形式
method:填充方式 1>pad/ffill:缺失值前面的值代替缺失值
2>backfill/bfill:缺失值后面的一个值代替缺失值
注意:value和method不能同时使用
duplicated(subset=None,keep=’first’) 用于标记是否有重复值,
subset:用于识别重复的列标签或列标签序列,默认识别所有的列标签
keep:删除重复项并保留第一次出现的项,取值可以是first,last,False
drop_duplicates(subset=None,keep=’first’,inplace=False) 用于删除重复值
示例代码如下:
df_obj=pd.DataFrame({'A':[1,2,3,np.nan],
'B':[np.nan,4,np.nan,6],
'C':['a',7,8,9],
'D':[np.nan,2,3,np.nan]})
df_obj
#1 使用innull()检查是否为缺失值
pd.isnull(df_obj)
#2 使用notnull()检查是否不为缺失值
pd.notnull(df_obj)
#3 借助sum()函数统计缺失值的数目
df_obj.isnull().sum()
# 4使用88.0替换缺失值
df_obj.fillna('88.0')
#5 创建datafarame对象 使用1.0填充a列缺失的数据 2.0填充b列的数据 4.0填充d
df_obj=pd.DataFrame({'A':[1,2,3,np.nan],
'B':[np.nan,4,np.nan,6],
'C':['a',7,8,9],
'D':[np.nan,2,3,np.nan]})
df_obj
df_obj.fillna({'A':1.0,'B':2.0,'D':4.0})
#6、重新创建如图所示DataFrame对象,使用缺失值后面的一个值代
替缺失值。
df_obj=pd.DataFrame({'A':[1,2,3,np.nan],
'B':[np.nan,4,np.nan,6],
'C':['a',7,8,9],
'D':[np.nan,2,3,np.nan]})
df_obj
df_obj.fillna(method='bfill')
#重复值处理
person_info=pd.DataFrame({'id':[1,2,3,4,4],
'name':['李明','周华','彭艳','刘华','刘华'],
'age':[18,18,29,58,58],
'height':[180,150,185,175,175]})
person_info
# 1、创建如图所示DataFrame对象,使用duplicated0从前向后查找和判断是否有重复值,并删除重复值,不#修改原始数据;
person_info.duplicated(subset=None, keep='first')
# 2、重新创建如图所示DataFrame对象,使用duplicated从后向前查找和判断是否有重复值,c
person_info=pd.DataFrame({'id':[1,2,3,4,4],
'name':['李明','周华','彭艳','刘华','刘华'],
'age':[18,18,29,58,58],
'height':[180,150,185,175,175]})
person_info
# 使用duplicated从后向前查找和判断是否有重复值,
person_info.duplicated(keep='last')
# 使用duplicated从后向前查找和判断是否有重复值,
person_info.drop_duplicates(keep='last',inplace=True)
person_info
1. 3σ原则 【背过定义的那个函数】
def three_sigma(ser):
mean_value=ser.mean()
std_value=ser.std()
# [mean-3std,mean+3std]
rule=(ser<(mean_value-3*std_value)) | (ser >(mean_value+3*std_value))
ser.loc[rule]
outrange=ser.loc[rule]
return outrange
three_sigma(df['B'])
2.箱线图分析
boxplot()方法
data.boxplot(column=['age','score'])
检测出异常值后,通常会采用如下四种方式处理这些异常值 1直接将含有异常值的记录删除。 2用具体的值来进行替换,可用前后两个观测值的平均值修正该异常值。 3不处理,直接在具有异常值的数据集上进行统计分析。 4视为缺失值,利用缺失值的处理方法修正该异常值 |
对异常值进行修改
replace(to_replace=None,value=None,inplace=False)
to_replace:表示查找背替换值得方法 value表示替换to_replace的值
更改数据类型
1、通过dtype属性查看数据类型
通过astpye()方法强制转换数据的类型
astpye(dtype,copy=True,errors=’raise’)
dtype:表示数据的类型
errors:错误采取的处理方式,可以取值为raise或者ignore
2..to_numeric()函数可以将传入的参数转换为数值类型
pandas.to_numerci(arg,error=’raise’)
层次化索引可以理解为单层索引的延伸,即在一个轴方向上具有多层索引
重塑层次化索引
stack() à 列转行 unstack() à 行转列
DataFrame.stack(level=-1,dropna=True)
Level:表示操作内层索引,如果是0,表示操作外层索引
Dropna:表示是否将旋转后的缺失值删除
轴向旋转
pivot(index=None,columns=None,values=None)
index:用于创建新DataFrame对象的行索引
columns:用于创建新DataFrame对象的列索引
vules:用于填充新DataFrame对象的值
重命名轴索引
rename(index=None,columns=None,inplace=False)
index,columns:表示对行索引名或列索引名的转换
离散化连续性数据
pandas.cut(x,bins,right=True,labels=None)
x:表示要分箱的数组,必须是一维的
bins:划分多少个区间,接受int类型
right:是否包含右端点,决定区间的开闭。