pandas 数据合并 pd.join() pd.merge() pd.crosstab() pd.concat()
文章目录
- 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()相关推荐
- 【Python】图解Pandas数据合并:concat、join、append
公众号:尤而小屋 作者:Peter 编辑:Peter 图解pandas数据合并:concat+join+append 在上一篇文章中介绍过pandas中最为常用的一个合并函数merge的使用,本文中介 ...
- pandas数据合并:concat、join、append
公众号:尤而小屋 作者:Peter 编辑:Peter 大家好,我是Peter~ 图解pandas数据合并:concat+join+append 在上一篇文章中介绍过pandas中最为常用的一个合并函数 ...
- 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 ...
- 【python数据分析】pandas数据合并
pandas数据合并 使用contact,append,merge完成数据集合并 自己学习用,欢迎大佬指正. 1.concat pd.concat()可以合并series和DataFrame对象,默认 ...
- Pandas知识点-合并操作join
Pandas知识点-合并操作join 在Pandas中,join()方法也可以用于实现合并操作,本文介绍join()方法的具体用法. 一.基础合并操作 join(other): 将一个或多个DataF ...
- pandas数据合并与重塑_PANDAS 数据合并与重塑(concat篇)
pandas作者Wes McKinney 在[PYTHON FOR DATA ANALYSIS]中对pandas的方方面面都有了一个权威简明的入门级的介绍,但在实际使用过程中,我发现书中的内容还只是冰 ...
- Pandas | 数据融合与拼接(Merge Concat)
Pandas对于数据的融合主要有以下几种方式 数据融合(Merge) pd.merge()方法可理解为"合并",主要注意两个参数: pd.merge(df1, df2, on='x ...
- 搞懂Pandas数据合并,这一片就够了
数据合并是数据处理过程中的必经环节,pandas作为数据分析的利器,提供了四种常用的数据合并方式,让我们看看如何使用这些方法吧! 1.concat() concat() 可用于两个及多个 DataFr ...
- Pandas数据合并与拼接的5种方法
pandas实现数据的合并与拼接 目录 一.DataFrame.concat:沿着一条轴,将多个对象堆叠到一起 二.DataFrame.merge:类似 vlookup 三.DataFrame.joi ...
最新文章
- python学习手册翻译很差吗-为什么要翻译?值得坚持下去么?
- jQuery ajax contentType processData 笔记
- java char字符转编码_一、java基础-数据类型_数据类型转化_字符编码_转义字符
- zookeeper的名词复盘-数据模型
- How to check if one event is cancel event - #Exit#
- centos8安装并启动tomcat9
- 第十七节:易混淆的概念(静态和非静态、拆箱和装箱)
- 1218数据库操作工具类的使用
- MySQL高级-SQL优化步骤
- tableau度量值计算_Tableau可视化(雷达图):漫威英雄能力值
- require,include,require_once和include_once之间的区别?
- Comparable与Comparator对比
- pytorch RuntimeError: expected scalar type Double but found Float
- 淘宝CMS新玩法,当粉丝营销遇上直通车,会擦出怎样的火花?
- 数据统计并制作韦恩图
- 一个简单的搜狗微信公众号案例
- BBQ EasyBuns
- 邮箱发信量到达上限,发不出邮件,你知道该怎么办吗?
- 数实融合激变时刻,与长期主义同行
- Python - 至多包含两个字符的最大子串
热门文章
- 全差分运算放大器浅析
- 领导说“辛苦了”,千万别回“应该的”, 这是我听过最扎心的答案了!
- ERLANG recon使用示例
- android手机怎么上卡,安卓手机卡慢怎么办 安卓手机卡慢解决方案【详解】
- 理解echo openssl概念、用法、常用参数
- 最新小笑授权系统源码V6.5+开心免授权版
- 周立波实意搞慈善 沈顺坤高举双手把他赞
- windows 下 搭建 ElasticSearch 环境
- JavaScript两个实用的图片懒加载优化方法
- android 隐藏输入法时自动关闭弹窗,Android疑难杂症之Dialog消失,关闭输入法