pandas的拼接操作
pandas中拼接操作有两种:
级联与合并
导入模块
import pandas as pd
import numpy as np
from pandas import Series,DataFrame
1、pandas中的级联
pandas中的级联,主要是针对于DataFrame的操作
级联函数:pd.concat(objs,axis=0,join=“outer”,…)
1.1 简单级联
对行进行级联的时候列标对应相同,对列进行级联的时候行标对应相同,此时级联会非常顺利,这样的级联就是简单级联
首先创建三个DataFrame对象
pandas中级联不仅要看形状是否一致,还要看对应的索引是否一致
1.2 不匹配级联
不匹配级联是指:对行级联列标有不匹配的相,对列级联行标有不匹配的相
(这些报红是警告,并不影响功能,版本低的可能就没有,版本高的一些功能会进行更改,可以加上sort=True)
axis默认为0,表示按行级联;axis=1表示按列级联
不匹配级联有以下几种链接方式
首先再创建一个DataFrame对象df4
- 外连接
join参数默认是"outer"代表外联接,对应行标或者列标如果有不匹配的地方则先补NaN再连接
- 内连接
join参数值为"inner"代表内连接,对应的行标或者列标如果有不匹配的地方直接去掉行级联
对比外连接,就是把含有NaN列都去掉
列级联
对比外连接,就是把含有NaN行都去掉
- 指定轴连接
默认axis=0,指定列时,要匹配的是行元素,axis=0,可以不写
指定行时,要匹配的是列元素,axis=1,此时要写上创建一个DataFrame对象df5
综合连接,有很多不匹配的地方
指定轴连接,指定"a",“c”,"g"三列,不匹配的地方以NaN补齐
还可以 以某个DataFrame对象的列为指定值
除了指定列,还可以指定行
1.3 append()函数
DataFrame的append()函数,用于将两个DataFrame进行行级联
df1.append(df2)
df2.append(df1)
2、合并
pd.merge()用于合并,合并与级联的区别:
- 级联可以对行也可以对列,合并只能对列
- 级联不需要有公共属性,而合并必须依赖于一个或者若干个key
- 合并的功能要比级联更加强大
首先创建两个DataFrame对象
2.1 合并形式
- 一对一合并
合并如果key值是两个表的公共属性,会把他们并成一个属性
df1和df2有公共属性name,可以直接以name为key值来合并
无公共属性的时候两个表不能直接合并
新建一个DataFrame对象df3,此时属性名变为"姓名"
df1和df3无公共属性,不能合并
- 一对多合并
新建一个DataFrame对象df4,
df1中的name属性的某些值在df4中有多个相对应,这种的合并就是一对多合并
一的那方把元素按照多的那一方扩展,然后合并
- 多对多合并
新建一个DataFrame对象df5,
f4中的name属性中的某些值有重复且在df5中有多个对应
拿df4的每一和df5的每一个分别匹配
2.2 key值的规范化
两个表之间进行合并会以某些公共的属性作为合并的key值,进行匹配并合并
2.2.1 如果有多个公共属性
- 当有多个公共属性的时候,默认情况下合并会以所有的公共属性为key,进行匹配
合并df1和df6
- 指定以某一个属性为key来合并,
此时其他的公共属性就会冲突,我们需要做一个冲突处理
2.2.2 如果没有公共属性
df1和df3,没有公共属性
- 如果两个表没有公共属性,我们可以左边出一个属性,右边出一个属性,共同构成key值来进行合并
左边df1出属性"name",右边df3出属性"姓名"
由于左侧和右侧出的key值名字不一样,所以没有合成一个属性,我们需要去掉一个
使用drop函数
去掉指定的行(或者列)索引,axis代表指定维度
- 左侧出索引右侧出索引来合并
2.3 内合并、外合并、左合并与右合并
df1
df7
- 内合并,不匹配的地方直接去掉
- 外合并 不匹配的地方补nan
- 左合并(方式同内合并)
- 右合并(方式同外合并)