文章目录

  • pd.join()
  • pd.merge()
    • pd.merge(left, right, how='inner', left_on=None, right_on=None...)形式
      • 按照一列进行合并
      • how 指定合并方式
      • suffixes 为重复列名自定义后缀
      • 按照二列进行合并
      • left_on right_on
      • left_index right_index
    • df1.merge(df2...)的形式
      • 内连接
      • 外连接
      • 左连接
      • 右连接
  • pd.crosstab()
  • pd.concat()
    • 2张表竖着合并 默认是外连接
    • 2张表横着合并
    • 2张表竖着合并 内连接
    • 2张表竖着合并 按照指定的列索引
    • 2张表竖着合并 重新设定key

pd.join()

默认情况下是把行索引相同的数据合并到一起
会求笛卡尔集

import pandas as pd
import numpy as npdf1 = pd.DataFrame(np.ones((2, 4)), index=["A", "A"], columns=list("abcd"))
df2 = pd.DataFrame(np.zeros((3, 3)), index=["A", "B", "C"], columns=list("xyz"))
print(df1)
print("*" * 20)
print(df2)
print("*" * 20)
print(df1.join(df2))
print("*" * 20)
print(df2.join(df1))

pd.merge()

这里将给出两大类merge方式 即pd.merge()和df1.merge(df2)

如果不指定合并方式how,默认的合并方式为inner ,那么就会求笛卡尔集

pd.merge(left, right, how=‘inner’, left_on=None, right_on=None…)形式

按照一列进行合并

按照指定的列把数据按照一定的方式合并到一起

import pandas as pd
import numpy as npdf1 = pd.DataFrame({'id':[1,10,1024],'name':['po','alisa','Michael'],'sex':['male','female','male']})df2 = pd.DataFrame({'id':[1,10,1025],'name':['softpo','alisa','Michael'],'age':[20,30,40]})display(df1,df2)

只按照id这一列进行合并,但是df1 df2还都有相同的列name,所以结果中出现了name_x,name_y来区分两列

on指定按照哪一列进行合并

会求笛卡尔集

how 指定合并方式

suffixes 为重复列名自定义后缀

按照二列进行合并

on指定按照哪一列进行合并

left_on right_on

假设数据库有2张表,user 和user的薪水,现在要将这两张表合并到一块

df1 = pd.DataFrame({'user_id':[11,22,33],'name':['po','alisa','Michael'],'sex':['male','female','male']})
df2 = pd.DataFrame({'salary_id':[11,22,33],'salary':[10000,20000,30000]})
display(df1,df2)


会求笛卡尔集

pd.merge(df1,df2,left_on='user_id',right_on='salary_id')

left_index right_index

按照行索引进行合并

import pandas as pd
import numpy as npdf = pd.DataFrame(np.random.randint(0,150,size = (2,3)),columns=['Python','Math','En'],index = list('AB'))
df
df_sum = pd.DataFrame(df.sum(axis = 1),columns=['sum'])
df_sum

pd.merge(df,df_sum,left_index=True,right_index=True)

df1.merge(df2…)的形式

内连接
import pandas as pd
import numpy as npdf1 = pd.DataFrame(np.ones((2, 4)), index=["A", "B"], columns=list("abcd"))
df3 = pd.DataFrame(np.arange(9).reshape(3, 3), columns=list("fax"))
print(df1)
print("*" * 20)
print(df3)
print("*" * 20)
# on="a" 按照a这一列进行合并
print(df1.merge(df3, on="a"))  # 第一种写法
# df1.merge(df3, on="a")   # 第二种写法
# 以上的这两种写法等价
# 但是使用join()方法时不等价

外连接
import pandas as pd
import numpy as npdf1 = pd.DataFrame(np.ones((2, 4)), index=["A", "B"], columns=list("abcd"))
df3 = pd.DataFrame(np.arange(9).reshape(3, 3), columns=list("fax"))
df1.loc["A", "a"] = 99
print(df1)
print("*" * 20)
print(df3)
print("*" * 20)
# on是按照哪一列进行合并 how合并方式
print(df1.merge(df3, on="a", how="outer"))

左连接
import pandas as pd
import numpy as npdf1 = pd.DataFrame(np.ones((2, 4)), index=["A", "B"], columns=list("abcd"))
df3 = pd.DataFrame(np.arange(9).reshape(3, 3), columns=list("fax"))
df1.loc['A','a'] = 99
print(df1)
print("*" * 20)
print(df3)
print("*" * 20)
# on是按照哪一列进行合并 how合并方式
print(df1.merge(df3, on="a", how="left"))

右连接
import pandas as pd
import numpy as npdf1 = pd.DataFrame(np.ones((2, 4)), index=["A", "B"], columns=list("abcd"))
df3 = pd.DataFrame(np.arange(9).reshape(3, 3), columns=list("fax"))
df1.loc['A','a'] = 99
print(df1)
print("*" * 20)
print(df3)
print("*" * 20)
print(df1.merge(df3, on="a", how="right"))

pd.crosstab()

数据下载链接
现有2张数据库表,user.csv 和 product.csv,统计一下每个人买的所有物品的数目

# -*- codeing = utf-8 -*-
import pandas as pd
from sklearn.decomposition import PCA# 读取2张表的数据
user = pd.read_csv('data/user.csv')
product = pd.read_csv('data/product.csv')# 合并2张表到一张表
# _mg = pd.merge(user, product, on=['user_id', 'user_id'])  # 合并数据方法1
_mg = user.merge(product, on='user_id')  # 合并数据方法2# 交叉表
# 行:是user_id 列:是把product_name这一列中的每一个字段进行去重统计后的
cro = pd.crosstab(_mg['user_name'], _mg['product_name'])
print(cro)

输出

product_name  华为A  华为b  小米A  小米B  苹果a
user_name
A1              1    1    1    0    1
A2              0    1    1    0    1
A3              3    0    0    0    0
A4              0    0    0    1    0

pd.concat()

df1 = DataFrame(np.random.randint(0,150,size = (5,3)),columns=['Python','Math','En'],index = list('ABCDE'))df2 = DataFrame(np.random.randint(0,150,size = (5,3)),columns=['Python','Math','En'],index=list('HIJKL'))display(df1,df2)

  • 2张表竖着合并 默认是外连接

不管是横着,还是竖着合并,行 列 索引都可以重复

pd.concat([df1,df2])

  • 2张表横着合并

不管是横着,还是竖着合并,行 列 索引都可以重复

df4 = pd.concat([df1,df2],axis = 1)
display(df4)

  • 2张表竖着合并 内连接
df5 = DataFrame(np.random.randint(0,150,size = (5,3)),columns=['Python','Math','Java'],index = list('ABCGH'))
display(df1, df5)

pd.concat([df1,df5],join = 'inner')

  • 2张表竖着合并 按照指定的列索引
pd.concat([df1,df5],join_axes=[df1.columns])

  • 2张表竖着合并 重新设定key

假设df1是老王的期中测试,df6是期末测试的成绩

df7 = pd.concat([df1,df6],keys = ['期中','期末'])
display(df7)

df7.unstack(level=0).stack()

pandas 数据合并 pd.join() pd.merge() pd.crosstab() pd.concat()相关推荐

  1. 【Python】图解Pandas数据合并:concat、join、append

    公众号:尤而小屋 作者:Peter 编辑:Peter 图解pandas数据合并:concat+join+append 在上一篇文章中介绍过pandas中最为常用的一个合并函数merge的使用,本文中介 ...

  2. pandas数据合并:concat、join、append

    公众号:尤而小屋 作者:Peter 编辑:Peter 大家好,我是Peter~ 图解pandas数据合并:concat+join+append 在上一篇文章中介绍过pandas中最为常用的一个合并函数 ...

  3. PANDAS 数据合并与重塑(concat篇) 原创 2016年09月13日 19:26:30 47784 pandas作者Wes McKinney 在【PYTHON FOR DATA ANALYS

    PANDAS 数据合并与重塑(concat篇) 原创 2016年09月13日 19:26:30 标签: 47784 编辑 删除 pandas作者Wes McKinney 在[PYTHON FOR DA ...

  4. 【python数据分析】pandas数据合并

    pandas数据合并 使用contact,append,merge完成数据集合并 自己学习用,欢迎大佬指正. 1.concat pd.concat()可以合并series和DataFrame对象,默认 ...

  5. Pandas知识点-合并操作join

    Pandas知识点-合并操作join 在Pandas中,join()方法也可以用于实现合并操作,本文介绍join()方法的具体用法. 一.基础合并操作 join(other): 将一个或多个DataF ...

  6. pandas数据合并与重塑_PANDAS 数据合并与重塑(concat篇)

    pandas作者Wes McKinney 在[PYTHON FOR DATA ANALYSIS]中对pandas的方方面面都有了一个权威简明的入门级的介绍,但在实际使用过程中,我发现书中的内容还只是冰 ...

  7. Pandas | 数据融合与拼接(Merge Concat)

    Pandas对于数据的融合主要有以下几种方式 数据融合(Merge) pd.merge()方法可理解为"合并",主要注意两个参数: pd.merge(df1, df2, on='x ...

  8. 搞懂Pandas数据合并,这一片就够了

    数据合并是数据处理过程中的必经环节,pandas作为数据分析的利器,提供了四种常用的数据合并方式,让我们看看如何使用这些方法吧! 1.concat() concat() 可用于两个及多个 DataFr ...

  9. Pandas数据合并与拼接的5种方法

    pandas实现数据的合并与拼接 目录 一.DataFrame.concat:沿着一条轴,将多个对象堆叠到一起 二.DataFrame.merge:类似 vlookup 三.DataFrame.joi ...

最新文章

  1. python学习手册翻译很差吗-为什么要翻译?值得坚持下去么?
  2. jQuery ajax contentType processData 笔记
  3. java char字符转编码_一、java基础-数据类型_数据类型转化_字符编码_转义字符
  4. zookeeper的名词复盘-数据模型
  5. How to check if one event is cancel event - #Exit#
  6. centos8安装并启动tomcat9
  7. 第十七节:易混淆的概念(静态和非静态、拆箱和装箱)
  8. 1218数据库操作工具类的使用
  9. MySQL高级-SQL优化步骤
  10. tableau度量值计算_Tableau可视化(雷达图):漫威英雄能力值
  11. require,include,require_once和include_once之间的区别?
  12. Comparable与Comparator对比
  13. pytorch RuntimeError: expected scalar type Double but found Float
  14. 淘宝CMS新玩法,当粉丝营销遇上直通车,会擦出怎样的火花?
  15. 数据统计并制作韦恩图
  16. 一个简单的搜狗微信公众号案例
  17. BBQ EasyBuns
  18. 邮箱发信量到达上限,发不出邮件,你知道该怎么办吗?
  19. 数实融合激变时刻,与长期主义同行
  20. Python - 至多包含两个字符的最大子串

热门文章

  1. 全差分运算放大器浅析
  2. 领导说“辛苦了”,千万别回“应该的”, 这是我听过最扎心的答案了!
  3. ERLANG recon使用示例
  4. android手机怎么上卡,安卓手机卡慢怎么办 安卓手机卡慢解决方案【详解】
  5. 理解echo openssl概念、用法、常用参数
  6. 最新小笑授权系统源码V6.5+开心免授权版
  7. 周立波实意搞慈善 沈顺坤高举双手把他赞
  8. windows 下 搭建 ElasticSearch 环境
  9. JavaScript两个实用的图片懒加载优化方法
  10. android 隐藏输入法时自动关闭弹窗,Android疑难杂症之Dialog消失,关闭输入法