前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python连接大法|“合体”

Python连接大法|“合体”

作者头像
数据山谷
发布2020-12-22 11:31:37
7420
发布2020-12-22 11:31:37
举报
文章被收录于专栏:数据山谷数据山谷数据山谷
不讲武德

2020年合并头牌之战

进行大战的背景

今日阳光明媚,今日万里无云,函数届的<不讲武德>比赛拉开序幕,首当其冲的就是小梦(merge)、小超(concat),也是合并功能里的俊男靓女,随着一只小虫(数据)的入场,大战一触即发~~

大赛前的寒暄

01

主办方

本次活动的主办方是Python和Pandas

02

小梦merge

小超呀,你认识sql中的join兄么,我们可是好兄弟(用法非常类似)

03

小超concat

哼,我和数据库中的UNION ALL(全连接)还是好姐妹呢

04

python/pandas

你们两个还比不比,攀亲戚来了呐,小梦你先来

merge

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

参数

说明

left

参与合并的左侧DataFrame

right

参与合并的右侧DataFrame

how

表示连接方式,默认为inner,还有'left','right','outer'

on

用于连接的列名,必须同时存在于左右两个DataFrame对象中,如果位指定,则以left和right列名的交集作为连接键

left_on

以左侧的DataFrame作为连接键

right_on

以右侧的DataFrame作为连接键

left_index

以左侧的行索引作为连接键

right_index

以右侧的行索引作为连接键

sort

根据连接键对合并后的数据进行排序,默认为True

suffixes

字符串值元组,用于追加到重叠列名的末尾,默认为('x','y')

copy

设置为False,可以在某些特殊情况下避免将数据复制到结果数据中。

indicator

bool或str,默认为False

validate

str,可选,如果指定,则检查合并是否为指定类型。

小梦merge

怎么样小超,我的功能强大不?

囫囵吞枣,你得让我们都懂呀

小超concat

小梦merge

别着急,这只是热身,好戏还在后面呢

小梦merge

Pandas老师,可以给我一个场景么,我来

为大家展示一下~

小梦merge

咕嘟,开始喽~

import pandas as pd
import numpy as np
df1 = pd.DataFrame({"key":["a","b","c","d","e"],"data":np.arange(5)})
df1

key

data

0

a

0

1

b

1

2

c

2

3

d

3

4

e

4

df2 = pd.DataFrame({"key":["a","b","c"],"data1":np.arange(3)})
df2

key

data1

0

a

0

1

b

1

2

c

2

#这两个的执行结果是一样的
pd.merge(df1,df2)
df1.merge(df2)

key

data

data1

0

a

0

0

1

b

1

1

2

c

2

2

#这三种的运行结果是一样的
pd.merge(df1,df2,on='key') # 默认是inner
pd.merge(df1,df2,on=['key'],how='inner')
df1.merge(df2,on='key')

key

data

data1

0

a

0

0

1

b

1

1

2

c

2

2

# 外连接,取并集,缺失值用NaN填充
pd.merge(df1,df2,on='key',how='outer')

key

data

data1

0

a

0

0.0

1

b

1

1.0

2

c

2

2.0

3

d

3

NaN

4

e

4

NaN

# 左连接,取df1的全部,df2的部分
pd.merge(df1,df2,on='key',how='left')

key

data

data1

0

a

0

0.0

1

b

1

1.0

2

c

2

2.0

3

d

3

NaN

4

e

4

NaN

# 右连接,取df2的全部,df1的部分
pd.merge(df1,df2,on='key',how='right')

key

data

data1

0

a

0

0

1

b

1

1

2

c

2

2

#如果左右侧DataFrame的链接键名不一样时,可使用left_on、right_on来制定左右连接键
d_df1 = pd.DataFrame({'key':['a','b','c','d','e','f'],'data1':range(6)})
d_df1

key

data1

0

a

0

1

b

1

2

c

2

3

d

3

4

e

4

5

f

5

d_df2 = pd.DataFrame({'key1':['a','b','c'],'data2':range(3)})
d_df2

key1

data2

0

a

0

1

b

1

2

c

2

pd.merge(d_df1,d_df2,left_on='key',right_on='key1')

key

data1

key1

data2

0

a

0

a

0

1

b

1

b

1

2

c

2

c

2

嚯,还挺厉害,我不能紧张,看我娓娓道来

小超concat

pd.concat(
    objs,
    axis=0,
    join='outer',
    join_axes=None,
    ignore_index=False,
    keys=None,
    levels=None,
    names=None,
    verify_integrity=False,
    sort=None,
    copy=True,
)

参数

说明

objs

连接的列表或字典,对象必须是pandas数据类型

axis

按列或者行拼接,0是纵轴,1是横轴

join

制定inner或outer,默认为outer

keys

默认无,如果传递了多个级别,则应包含元组。构造使用传递的键作为最外层的层次索引。

levels

序列列表,默认无,用于构造多重索引

names

创建分层级别的名称

verify_integrity

bool,默认为False,检查新的连接轴是否包含重复项

一向公正的pandas社长同样也为小超建造了一个场景~

df1 = pd.DataFrame(np.random.randn(2,2),columns=['x','y'])
df1

x

y

0

1.239784

0.697781

1

-2.510396

0.343820

df2 = pd.DataFrame(np.random.randn(4,2),columns=['x','z'])
df2

x

z

0

-1.158629

-0.065128

1

0.410176

-0.577408

2

-0.663995

-0.308309

3

0.138777

-0.542335

家眷实团圆,一呼百诺至,给我合!(不知道哪里的口诀...)

张丽丽

# 默认是并集,纵向连接
result = pd.concat([df1,df2])
result

x

y

z

0

1.239784

0.697781

NaN

1

-2.510396

0.343820

NaN

0

-1.158629

NaN

-0.065128

1

0.410176

NaN

-0.577408

2

-0.663995

NaN

-0.308309

3

0.138777

NaN

-0.542335

#纵向取交集,横向取并集
pd.concat([df1,df2],axis=1,join='inner')
pd.concat([df1,df2],axis=1,join='outer')

这个大家可以自己拿去执行一些哦(其实是因为放文章里不太美观~)

不讲武德

两人你来我往了不知多久,主办方都鼾声四起了

pandas伸个懒腰,小结一下吧:

1.merge默认是内连接,concat默认是外连接

2.concat准确来说是拼接,axis参数决定横纵向拼接,在axis=1 时为横向拼接,等价于merge

3.merge合并的范围广泛,concat合并的范围小,仅支持索引连接

当然了作为评委的你们觉得如何呢

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据山谷 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档