pd.append()函数
-
相同列名DataFrame按列合并
pd.DataFrame({'name':['k','s'],'age':[11,55]}).append(pd.DataFrame({'name':['kk','ss'],'age':[11,55]}),ignore_index=True)
下面是合并后的效果:
-
不同列名DataFrame合并
pd.DataFrame({'na':['k','s'],'age':[11,55]}).append(pd.DataFrame({'name':['kk','ss'],'age':[11,55]}),ignore_index=True)
下面是合并效果:
pd.concat()函数
- 相同列名行合并
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
result = pd.concat([df1, df2])
result
等价于参数axis=0
result = pd.concat([df1, df2], axis=0) # axis=0 表示沿着行(索引)合并
result
下面是合并效果:
- 相同列名列合并
result = pd.concat([df1, df2], axis=1) # axis=1 表示沿着列(索引)合并
result
下面是列名列合并效果:
- 不同列名列合并
df3 = pd.DataFrame({'C': [9, 10]}, index=[1, 3])
result = pd.concat([df1, df3], axis=1,ignore_index=True)
result
concat函数比append函数好强大,有一点在于拥有相同index会自动合并同一行,而不是另外新增。
下面是合并效果:
- keys参数使用
result = pd.concat([df1, df2], axis=0, keys=['df1', 'df2'])
result
下面是合并效果:
可以发现DataFrame前面多了df1和df2命名,这就是keys的作用。
pd.merge()函数
pd.merge()可以理解为类似于SQL语言的连接,先创建两个DateFrame,下面都是用key字段为关键字连接,不是参数哦。
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value': [1, 2, 3, 4]})
df1
df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value': [5, 6, 7, 8]})
df2
![df2](https://i-blog.csdnimg.cn/direct/aaebcf7abb154045a383f2e728e04a89.png)
![df1](https://i-blog.csdnimg.cn/direct/4b5610fa201c4944a2ee9324a115b99d.png)
-
内连接
result = pd.merge(df1, df2, on='key')
等价于
result = pd.merge(df1, df2, on='key', how='inner')
result
how参数默认为inner,代码是将key相同的两个df合并起来,效果如下:
-
左连接
result = pd.merge(df1, df2, on='key', how='left')
result
左连接效果如下:
-
右连接
result = pd.merge(df1, df2, on='key', how='right')
result
右连接效果如下:
-
全外连接
result = pd.merge(df1, df2, on='key', how='outer')
result
全外连接效果如下:
上面都是单个关键字进行连接,下面是多关键字连接。
-
多关键字内连接
df1 = pd.DataFrame({'key1': ['A', 'B', 'C'], 'key2': ['A', 'B', 'C'], 'value': [1, 2, 3]})
df2 = pd.DataFrame({'key1': ['B', 'C', 'D'], 'key2': ['B', 'C', 'D'], 'value': [4, 5, 6]})
result = pd.merge(df1, df2, on=['key1', 'key2'])
result
下面是多关键字合并效果:
这是得到这个结果的原因是key1和key2公共值是B和C,以上都是在两个df有相同列名和公共值的基础。当列名不一致时,有什么合并办法呢?
-
行内连接
df1 = pd.DataFrame({'value': [1, 2, 3]}, index=['A', 'B', 'C'])
df2 = pd.DataFrame({'value': [4, 5, 6]}, index=['B', 'C', 'D'])
result = pd.merge(df1, df2, left_index=True, right_index=True)
result
下面是连接后的效果:
可以发现只有行索引都为B和C的值被取出来了
-
重复元素行合并获取
# 处理重复的列名:
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'A': [7, 8, 9], 'B': [4, 11, 12]})
#1 4 7 是因为都是第一行的,然后4是共同的。
result = pd.merge(df1, df2, on='B', suffixes=('_left', '_right'))
result
下面是实现效果: