python学习 --DataFrame连接: merge、concat、join、append

目录

1、pd.merge(left, right, how='inner')

2、pd.concat([left,right],axis=1,join='inner’)

a、根据行索引进行连接(两表所有列横向堆叠)

b、根据列索引进行连接(两表所有行纵向堆叠)

3、df_left.join(df_right)

a、根据行索引进行连接(两表所有列横向堆叠)

b、根据列索引进行连接(两表所有列横向堆叠)

4、df.append([df1, df2...])

a、添加DataFrame表

b、添加Series序列


1、pd.merge(left, right, how='inner')

  • left:指定需要连接的主表
  • right:指定需要连接的辅表
  • on: 用于连接的列名
  • how:指定连接方式,默认为inner内连,还有其他选项,如左连left、右连right和外连outer

根据指定列进行连接:

import pandas as pd

list1 = [['赵一', 23, '男'], ['钱二', 27, '女'], ['孙三', 26, '女']]
list2 = [['赵一', '游泳'], ['李四', '唱歌'], ['周五', '下棋']]
df1 = pd.DataFrame(list1, columns=['姓名', '年龄', '性别'], index=['a', 'b', 'c'])
df2 = pd.DataFrame(list2, columns=['姓名', '爱好'], index=[1, 2, 3])

# 左连接 --左表全要,右表与之匹配
print(pd.merge(df1, df2, on='姓名', how='left'))
# 右连接 --右表全要,左表与之匹配
print(pd.merge(df1, df2, on='姓名', how='right'))
# 内连接 --只有共有部分匹配
print(pd.merge(df1, df2, on='姓名', how='inner'))
# 外连接 --先将共有部分匹配,再将独有部分缺少数据填充空堆叠
print(pd.merge(df1, df2, on='姓名', how='outer'))
​

运行结果:

左连接:
姓名 年龄 爱好_x 爱好_y
0 赵一 23 下棋 游泳
1 钱二 27 游泳 NaN
2 孙三 26 唱歌 NaN

右连接:
姓名 年龄 爱好_x 爱好_y
0 赵一 23.0 下棋 游泳
1 李四 NaN NaN 唱歌
2 周五 NaN NaN 下棋

内连接:
姓名 年龄 爱好_x 爱好_y
0 赵一 23 下棋 游泳

外连接:
姓名 年龄 爱好_x 爱好_y
0 赵一 23.0 下棋 游泳
1 钱二 27.0 游泳 NaN
2 孙三 26.0 唱歌 NaN
3 李四 NaN NaN 唱歌
4 周五 NaN NaN 下棋

2、pd.concat([left,right],axis=1,join='inner’)

  • left:指定需要连接的主
  • right:指定需要连接的辅表
  • axis::axis =1用于横向,axis =0代表纵向(默认为0)
  • join:指定连接方式,只有outer,inner 两种
  • ignore_index:如果为True,不使用并重置轴上的索引值。结果轴将被标记为0,...,n-1。
  • keys:序列,默认值无。使用传递的键作为最外层构建层次索引。如果为多索引,应该使用元组。

a、根据行索引进行连接(两表所有列横向堆叠)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值