数据合并
概念
1.纵向拼接
指将两个列名相同的Dataframe表格对象上下拼接到一起。
2.横向拼接
指将两个索引相同的Dataframe表格对象左右拼接到一起。
拼接合并
pd.concat()函数
语法:pd.concat([表格对象1,表格对象2],axis=0或1)
axis默认为0,表示为横向拼接,axis=1时则表示纵向拼接
主键合并
基于两个表共有的主键(即某列数据)将两个表的数据根据主键相同原则进行拼接(匹配)。
合并方式
根据合并后显示数据的逻辑不同,将主键合并分为:左连接、右连接、内连接、外连接。
合并方式 | 结果 |
---|---|
左连接 | 只显示左表的主键所对应的数据 |
右连接 | 只显示右表的主键所对应的数据 |
内连接 | 只显示左表和右表共有的主键所对应的数据 |
外连接 | 显示左表和右表所有的主键所对应的数据 |
主键合并函数pd.merge()
参数含义
参数 | 作用 |
---|---|
left | 用来合并的左表,接收DataFrame表格对象 |
right | 用来合并的右表,接收DataFrame表格对象 |
how | 主键合并的连接方式(左连接left、右连接right、外连接outer、内连接inner) |
on | 当左右表用来拼接的字段名相同时,可以使用on参数指定 |
left_on | 左右两表中主键名称不一致时使用,指定左表的主键列名 |
right_on | 左右两表中主键名称不一致时使用,指定右表的主键列名 |
left_index | 当需要以左表的索引作为主键时使用、接收布尔值True |
right_index | 当需要以右表的索引作为主键时使用,接收布尔值True |
示例
#先创建两个表格对象
df1 = pd,DataFrame(
[['张三','19'],['王五','20'],['李四','19']],
columns=['姓名','年龄']
)
df2 = pd.DataFrame)
[['张三','男'],['王五','男'],['李四','女']],
columns=['姓名','性别']
)
#左连接
pd.merge(
df1,
df2,
how='left',
on = '姓名'
)
#右连接
pd.merge(
df1,
df2,
how='right',
on = '姓名'
)
#外连接
pd.merge(
df1,
df2,
how='outer',
on = '姓名'
)
#内连接
pd.merge(
df1,
df2,
how='inner',
on = '姓名'
)
数据清洗
去重复值
概念:删除某个序列或是表格中某个序列中的重复数据。
方法:DataFrame表格和Series序列对象内置方法drop_duplicates()
语法:表格/序列对象.drop_duplicates(subset=None,keep=‘first’,inplace=False)
参数 | 作用 |
---|---|
subset | 当去重对象是表格对象时使用,指定去重依据的字段 |
keep | 指定去重后保留哪一行,frist表示第一行,last表示最后一行 |
inplace | 表示去重是否堆在原始数据对象上运行 |
表格去重
通过subset参数指定通过哪一列数据来去重
df.drop_duplicates(subset=['姓名'])
处理缺失值
查看数据的缺失值
表格对象.isnull()方法返回数据是否缺失的布尔值矩阵。
表格对象.isnull().sum()返回各列的缺失值数量。
#导入表格数据后
#查看缺失的布尔值矩阵
df_user.isnull()
#查看各列缺失值的数量
df_user.isnull().sum()
1.删除法处理缺失值
删除法:删除某个缺失数据所在的行的所有数据。
语法:表格对象.dropna(axis=0,how=‘any’,subset=None,inplace=False)
参数 | 作用 |
---|---|
axis | 指定删除行或者列,默认为0,表示删除行 |
how | 对表格对象多个字段的缺失值进行删除时使用。‘any’表示任何一个字段有缺失就删除。‘all’表示所有字段都缺失才删除 |
subset | 指定要删除的缺失值来自哪一(几)列 |
inplace | 表示是否对原数据生效,默认为False |
#构建一个表格
df_name = pd.DataFrame(
[['张三',18,'男'],[np.nan,20,'男'],['李四',np.nan,'女']],
columns=['姓名','年龄','性别']
)
#一列
df_nan.dropna(subset=['姓名','年龄','性别'],how='any')
#所有列
df_nan.dropna(subset=['姓名','年龄','性别'],how='all')
2.替换法处理缺失值
替换法:使用某个数据去替换缺失值的处理方法,又叫填充法。
语法:序列对象.fillna(values=需要替换的值,inplace=False)
替换法又细分为三种反复分别为:
平均值法:一般对数值型序列使用
众数法:一般对类别型序列使用
特殊值法:一般在能够判断缺失数据和其他数据有不同特征时使用。
异常值
异常值有两个概念
1.通俗意义上,异常值是能根据经验判断的不符合常理的数据。
2、数学层面上,异常值是某一个序列中距离大部分数据较远,远到一定程度的数据。(指一组测定值中与 平均值 的偏差超过两倍 标准差 的测定值,与平均值的偏差超过三倍标准差的测定值,称为高度异常的异常值)
异常值计算涉及的相关数学概念:
第一四分位数 (Q1),又称“较小四分位数”,等于该样本中所有数值由小到大排列后第25%的数字
第二四分位数 (Q2),又称“中位数”,等于该样本中所有数值由小到大排列后第50%的数字
第三四分位数 (Q3),又称“较大四分位数”,等于该样本中所有数值由小到大排列后第75%的数字
第三四分位数与第一四分位数的差距又称四分位距(IQR)
IQR=Q3-Q1
正常值区间:[Q1-1.5IQR,Q3+1.5IQR]
正常值区间之外的便是异常值了,对吧?(狗头)
处理方法
处理方法有:删除法、替换法
删除法:删除异常值数据所在的行
替换法:用均值法。众数法来替换掉异常值