【Python数据分析】pands中的Merge与join

目录

  • 1.Merge

    • 1.1 简单关联:left_on与right_on
    • 1.2 使用how参数:指定连接方式
    • 1.3 right_index与right_index
    • 1.4 sort参数:排序
  • 2.join

1.Merge

Pandas具有全功能的,高性能内存中连接操作,与关系型数据库中的连接操作类似。
语法:

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
         left_index=False, right_index=False, sort=True,
         suffixes=('_x', '_y'), copy=True, indicator=False)

1.1 简单关联:left_on与right_on

下面是Merge的一些实战案例:
(1)创建测试数组

import pandas as pd
df1 = pd.DataFrame({'studentNo':['A01','A02','A03','A04'],
                   'studentName':['Jack','Lucy','Marry','Tom'],
                   'studentAge':[18,19,21,17],
                   'classNo':['class01','class02','class03','class02']
                   })
df2 = pd.DataFrame({'classNo':['class01','class02','class03','class04'],
                     'className':['火箭1班','火箭2班','火箭3班','火箭4班']
                     })

# 学生信息
print(df1)

# 班级信息
print(df2)

(2)使用Merge,找出每个学生对应的班级名字

print(pd.merge(df1, df2, on="classNo")) # 这里的df1类似关系型数据库的主表,df2对应
# 如果存在多个键关联,则on = ['key1','key2']

输出结果:

1.2 使用how参数:指定连接方式

# 1.取交集:默认取交集
print('--------参数how = \'inner\'的结果--------------')
print(pd.merge(df1, df2, on="classNo",how='inner'))  # 类似内连接
# 2.取并集,数据缺失则为NaN
print('--------参数how = \'outer\'的结果--------------')
print(pd.merge(df1, df2, on="classNo",how='outer')) # 类似全连接

# 3.左连接
print('--------参数how = \'left\'的结果--------------')
print(pd.merge(df1, df2, on="classNo",how='left')) 

# 4.右连接
print('--------参数how = \'right\'的结果--------------')
print(pd.merge(df1, df2, on="classNo",how='right'))  

1.3 right_index与right_index

import pandas as pd

df1 = pd.DataFrame({'left_key':list('abcd'),
                    'data1':range(4)})

df2 = pd.DataFrame({'right_key':list('acef'),
                    'data2':range(4)})
# df1 以‘lkey’为键,df2以'rkey'为键
print(pd.merge(df1,df2,left_on='left_key',right_on='right_key'))         

df1 = pd.DataFrame({'key':list('abcdfeg'),
                   'data1':range(7)})
df2 = pd.DataFrame({'data2':range(1,6)},
                  index = list('abcde'))
print('----------df1-------------')
print(df1)
print('----------df2-------------')
print(df2)
print('----------df1,df2,参数:left_on=\'key\',right_index=True-------------')
print(pd.merge(df1,df2,left_on='key',right_index=True))
# df1采用key列值作为关联数据,df2采用index作为关联数据
# left_index:为True时,第一个df以index为键,默认False
# right_index:为True时,第二个df以index为键,默认False

# 所以left_on, right_on, left_index, right_index可以相互组合

1.4 sort参数:排序

import pandas as pd
# 参数sort
df1 = pd.DataFrame({'key':list('baecd'),
                   'data1':[10,2,4,7,5]})
df2 = pd.DataFrame({'key':list('abc'),
                    'data2':[11,2,33]})
print('-------------df1-------------')
print(df1)
print('-------------df2-------------')
print(df2)

y1 = pd.merge(df1,df2, on = 'key', how = 'outer')
y2 = pd.merge(df1,df2, on = 'key', sort=True, how = 'outer')
print('-------------df1与df2全连接的结果-------------')
print(y1)
print('-------------df1与df2全连接并根据连接键排序的结果-------------')
print(y2)
# sort:按照字典顺序通过 连接键 对结果DataFrame进行排序。默认为False,设置为False会大幅提高性能
print('-------------df1与df2全连接的结果根据data1排序-------------')
# 也可以连接完毕后直接使用DataFrame的排序方法
print(y2.sort_values('data1'))

2.join

import pandas as pd
# pd.join 通过索引连接
left = pd.DataFrame({'A':['A01','A02','A03'],
                     'B':['B01','B02','B03']
                    },index=['k1','k2','k3'])

right = pd.DataFrame({'C':['C01','C02','C03','C04'],
                     'D':['D01','D02','D03','D04']
                    },index=['k1','k2','k3','k4'])

print(left,'-----------left-----------\n')
print(left,'-----------right-----------\n')
print(left.join(right),'-----------left.join(right)-----------\n')
print(left.join(right,how='outer'),'-----------left.join(right)-----------\n')
# 上述语句等价于 pd.merge(left, right, left_index=True, right_index=True, how='outer')

df1 = pd.DataFrame({'key':list('bbacde'),
                  'data1':[1,3,5,7,2,4]})

df2 = pd.DataFrame({'key':list('abc'),
                   'data2':[11,2,15]
                   })

print('-----------df1-----------')
print(df1)

print('-----------df2-----------')
print(df2)

# 指定参数suffixes
print('-' * 50)
print(pd.merge(df1, df2, left_index=True, right_index=True, suffixes=('_1', '_2')))  

# 用df1中的索引与df2['data2']中的索引连接
print('-' * 50)
# print(df2['data2'])
print(df1.join(df2['data2']))

left = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                     'B': ['B0', 'B1', 'B2', 'B3'],
                     'key': ['K0', 'K1', 'K0', 'K1']})
right = pd.DataFrame({'C': ['C0', 'C1'],
                      'D': ['D0', 'D1']},
                     index=['K0', 'K1'])
print(left)
print(right)
print(left.join(right, on = 'key'))
# 等价于pd.merge(left, right, left_on='key', right_index=True, how='left', sort=False);
# left的‘key’和right的index

输出结果:

原文地址:https://www.cnblogs.com/OliverQin/p/12332422.html

时间: 2024-10-18 08:31:57

【Python数据分析】pands中的Merge与join的相关文章

python数据分析pandas中的DataFrame数据清洗

pandas中的DataFrame中的空数据处理方法: 方法一:直接删除 1.查看行或列是否有空格(以下的df为DataFrame类型,axis=0,代表列,axis=1代表行,以下的返回值都是行或列索引加上布尔值)• isnull方法 • 查看行:df.isnull().any(axis=1)  • 查看列:df.isnull().any(axis=0)• notnull方法:• 查看行:df.notnull().all(axis=1)• 查看列:df.notnull().all(axis=0

python数据分析笔记中panda(2)

1 将手机号码分开为运营商,地区和号码段 1 from pandas import read_csv; 2 3 df = read_csv("H:\\pythonCode\\4.6\\data.csv"); 4 5 6 #转换成字符数据 方便用slice 7 df['tel'] = df['tel'].astype(str); 8 9 #字符的抽取:根据已知列数据的开始和结束的位置 抽取新的列 slice(start,stop) 10 #运营商 11 bands = df['tel']

彻底理解Python多线程中的setDaemon与join【配有GIF示意】

在进行Python多线程编程时, join() 和 setDaemon() 是最常用的方法,下面说说两者的用法和区别. 1.join () 例子:主线程A中,创建了子线程B,并且在主线程A中调用了B.join(), 那么,主线程A会在调用的地方阻塞,直到子线程B完成操作后,才可以接着往下执行. 2.setDaemon() 例子:主线程A中,创建了子线程B,并且在主线程A中调用了B.setDaemon(), 即:把主线程A设置为守护线程,这时候,要是主线程A执行结束了,就不管子线程B是否完成,一并

《Python 数据分析》笔记——pandas

Pandas pandas是一个流行的开源Python项目,其名称取panel data(面板数据)与Python data analysis(Python 数据分析)之意. pandas有两个重要的数据结构:DataFrame和Series pandas数据结构之DataFrame pandas的DataFrame数据结构是一种带标签的二维对象,与Excel的电子表格或者关系型数据表非常相似. 可以用下列方式来创建DataFrame: 1.从另一个DataFrame创建DataFrame 2.

python数据分析之:绘图和可视化及python数据分析实例

在数据分析领域,最出名的绘图工具就是matlib.在Python同样有类似的功能.就是matplotlib.前面几章我们都在介绍数据的生成,整理,存储.那么这一章将介绍如果图形化的呈现这些数据.来看下面的代码 这个代码通过numpy生成50个随机数,然后进行求和,最后将50个数绘制成图像,k--代表以虚线的方式 import matplotlib.pyplot as plt from numpy.random import randn if __name__=="__main__":

利用Python数据分析可以实现些什么功能呢?

随着大数据时代的来临和Python编程语言的火爆,Python数据分析早已成为现在职场人的必备核心技能.那么利用Python数据分析可以做什么呢?简单来说,可以做到的内容有很多,比如检查数据表.数据表清洗.数据预处理.数据提取和数据筛选汇总等等.下面来为大家详细讲解一下这些用处 1.检查数据表 Python中使用shape函数来查看数据表的维度,也就是行数和列数.你可以使用info函数查看数据表的整体信息,使用dtypes函数来返回数据格式.Isnull是Python中检验空值的函数,你可以对整

python 数据分析--数据处理工具Pandas(1)

说明: 本文用到的数据集下载地址: 链接:https://pan.baidu.com/s/1zSOypUVoYlGcs-z2pT2t0w 提取码:z95a Pands模块可以帮助数据分析师轻松地解决数据的预处理问题,如数据类型的转换.缺失值的处理.描述性统计分析.数据的汇总等.Pandas模块的核心操作对象就是序列(Series)和数据框(DataFrame).序列可以理解为数据集中的一个字段,数据框是指含有至少两个字段(或序列)的数据集. 1. 序列和数据框的构造 1.1 构造序列 构造一个序

SQL Tuning 基础概述06 - 表的连接方式:Nested Loops Join,Merge Sort Join & Hash Join

nested loops join 嵌套循环 merge sort join 排序合并 hash join 哈希连接 nested loops join(嵌套循环)   驱动表返回几条结果集,被驱动表访问多少次,有驱动顺序,无须排序,无任何限制. 驱动表限制条件有索引,被驱动表连接条件有索引. hints:use_nl() merge sort join(排序合并)   驱动表和被驱动表都是最多访问1次,无驱动顺序,需要排序(SORT_AREA_SIZE),连接条件是<>或like导致无法使用

[Python数据分析]新股破板买入,赚钱几率如何?

这是本人一直比较好奇的问题,网上没搜到,最近在看python数据分析,正好自己动手做一下试试.作者对于python是零基础,需要从头学起. 在写本文时,作者也没有完成这个小分析目标,边学边做吧. ================================================================ Python基础: 中国大学Mooc,南京大学,张莉老师 -<用Python玩转数据> 了解基本的语法和常用函数就行了,其他的用的时候再搜. 财经数据源: TuShare