pandas数据连接

pandas数据连接

pd.merge
import pandas as pd
import numpy as np

df_obj1 = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'],
                        'data1' : np.random.randint(0,10,7)})
df_obj2 = pd.DataFrame({'key': ['a', 'b', 'd'],
                        'data2' : np.random.randint(0,10,3)})

print(df_obj1)
print('---------------')
print(df_obj2)

运行结果:
在这里插入图片描述

  • 根据单个或多个键将不同的dataframe的行连接起来,类似于数据库中的连接操作

  • 默认将重叠列的列名作为外键进行连接

    # 默认将重叠列的列名作为“外键”进行连接
    pd.merge(df_obj1, df_obj2)
    

    运行结果:
    在这里插入图片描述

    • on 显示指定外键

      # on显示指定“外键”
      pd.merge(df_obj1, df_obj2, on='key')
      

      运行结果:
      在这里插入图片描述

    • left_on 左侧数据的外键

    • right_on 右侧数据的外键

      # left_on,right_on分别指定左侧数据和右侧数据的“外键”
      
      # 更改列名
      df_obj1 = df_obj1.rename(columns={'key':'key1'})
      df_obj2 = df_obj2.rename(columns={'key':'key2'})
      pd.merge(df_obj1, df_obj2, left_on='key1', right_on='key2')
      

      运行结果:
      在这里插入图片描述

  • 默认是内连接(inner),即结果中的键是交集

  • how 用来指定连接方式

    • 外连接(outer),结果中的键是并集

      # “外连接”
      pd.merge(df_obj1, df_obj2, left_on='key1', right_on='key2', how='outer')
      

      运行结果:
      在这里插入图片描述

    • 左连接(left)

      # 左连接
      pd.merge(df_obj1, df_obj2, left_on='key1', right_on='key2', how='left')
      

      运行结果:
      在这里插入图片描述

    • 右连接(right)

      # 右连接
      pd.merge(df_obj1, df_obj2, left_on='key1', right_on='key2', how='right')
      

      运行结果:
      在这里插入图片描述

  • 处理重复列名

    # 处理重复列名
    df_obj1 = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'],
                            'data' : np.random.randint(0,10,7)})
    df_obj2 = pd.DataFrame({'key': ['a', 'b', 'd'],
                            'data' : np.random.randint(0,10,3)})
    
    pd.merge(df_obj1, df_obj2, on='key', suffixes=('_left', '_right'))
    

    运行结果:
    在这里插入图片描述

    • suffixes,默认为_x, _y
  • 按索引连接

    • left_index = True 或right_index = True

      # 按索引连接
      df_obj1 = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'],
                              'data1' : np.random.randint(0,10,7)})
      df_obj2 = pd.DataFrame({'data2' : np.random.randint(0,10,3)}, index=['a', 'b', 'd'])
      pd.merge(df_obj1, df_obj2, left_on='key', right_index=True)
      

      运行结果:
      在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sweeney Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值