pandas数据拼接的实现示例


Posted in Python onApril 16, 2020

一 前言

pandas数据拼接有可能会用到,比如出现重复数据,需要合并两份数据的交集,并集就是个不错的选择,知识追寻者本着技多不压身的态度蛮学习了一下下;

二 数据拼接

在进行学习数据转换之前,先学习一些数拼接相关的知识

2.1 join()联结

有关merge操作知识追寻者这边不提及,有空可能后面会专门出一篇相关文章,因为其学习方式根SQL的表联结类似,不是几行能说清楚的知识点;

join操作能将 2 个DataFrame 合并为一块,前提是DataFrame 之间的列没有重复;

# -*- coding: utf-8 -*-

import pandas as pd
import numpy as np

data1 = {
  'user' : ['zszxz','craler','rose'],
  'price' : [100, 200, 300],
  'hobby' : ['reading','running','hiking']
}
index1 = ['user1','user2','user3']
frame1 = pd.DataFrame(data1,index1)

data2 = {
  'person' : ['zszxz','craler','rose'],
  'number' : [100, 2000, 3000],
  'activity' : ['swing','riding','climbing']
}
index2 = ['user1','user2','user3']
frame2 = pd.DataFrame(data2,index2)

join = frame1.join(frame2)
print(join)

输出

         user  price    hobby  person  number  activity
user1   zszxz    100  reading   zszxz     100     swing
user2  craler    200  running  craler    2000    riding
user3    rose    300   hiking    rose    3000  climbing

2.2 concat()拼接

使用 concat() 函数能将2个 Series 拼接为一个,默认按行拼接;

ser1 = pd.Series(['111','222',np.NaN])
ser2 = pd.Series(['333','444',np.NaN])
# 默认按行拼接
print(pd.concat([ser1, ser2]))

如果按列拼接则 axis = 1

ser1 = pd.Series(['111','222',np.NaN])
ser2 = pd.Series(['333','444',np.NaN])
# 按列拼接
print(pd.concat([ser1, ser2],axis=1))

输出

     0    1
0  111  333
1  222  444
2  NaN  NaN

更近一步,指定key 参数 输出的数据格式就和 DataFrame 一样

ser1 = pd.Series(['111','222',np.NaN])
ser2 = pd.Series(['333','444',np.NaN])
# 按列拼接
data = pd.concat([ser1, ser2],axis=1, keys=['zszxz', 'rzxx'])
print(data)

输出

  zszxz rzxx
0   111  333
1   222  444
2   NaN  NaN

注 : DataFrame 的 concat 操作 和 Series 类似;

2.3 combine_first()组合

索引重复时就可以使用combine_first进行拼接

ser1 = pd.Series(['111','222',np.NaN],index=[1,2,3])
ser2 = pd.Series(['333','444',np.NaN,'555'],index=[1,2,3,4])
data = ser1.combine_first(ser2)
print(data)

输出

1    111
2    222
3    NaN
4    555
dtype: object

将Series 位置互换一下,可以看见基准将以 ser2为准;

ser1 = pd.Series(['111','222',np.NaN],index=[1,2,3])
ser2 = pd.Series(['333','444',np.NaN,'555'],index=[1,2,3,4])
data = ser2.combine_first(ser1)
print(data)

输出

1    333
2    444
3    NaN
4    555
dtype: object

2.4 轴转换

准备的数据

# -*- coding: utf-8 -*-

import pandas as pd
import numpy as np

data = {
  'user' : ['zszxz','craler','rose'],
  'price' : [100, 200, 300],
  'hobby' : ['reading','running','hiking']
}
index = ['user1','user2','user3']
frame = pd.DataFrame(data,index)
print(frame)

输出

         user  price    hobby
user1   zszxz    100  reading
user2  craler    200  running
user3    rose    300   hiking

stack() 将 列转为行;

# -*- coding: utf-8 -*-

import pandas as pd
import numpy as np

data = {
  'user' : ['zszxz','craler','rose'],
  'price' : [100, 200, 300],
  'hobby' : ['reading','running','hiking']
}
index = ['user1','user2','user3']
frame = pd.DataFrame(data,index)
print(frame.stack())

输出

user1  user       zszxz
       price        100
       hobby    reading
user2  user      craler
       price        200
       hobby    running
user3  user        rose
       price        300
       hobby     hiking
dtype: object

使用 unstack()将 数据结构重新返回

# -*- coding: utf-8 -*-

import pandas as pd
import numpy as np

data = {
  'user' : ['zszxz','craler','rose'],
  'price' : [100, 200, 300],
  'hobby' : ['reading','running','hiking']
}
index = ['user1','user2','user3']
frame = pd.DataFrame(data,index)
sta = frame.stack()
print(sta.unstack())

输出

         user price    hobby
user1   zszxz   100  reading
user2  craler   200  running
user3    rose   300   hiking

到此这篇关于pandas数据拼接的实现示例的文章就介绍到这了,更多相关pandas数据拼接内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木! 

Python 相关文章推荐
Python调用C++程序的方法详解
Jan 24 Python
python2.6.6如何升级到python2.7.14
Apr 08 Python
Sanic框架流式传输操作示例
Jul 18 Python
实例讲解Python3中abs()函数
Feb 19 Python
Pandas+Matplotlib 箱式图异常值分析示例
Dec 09 Python
python读取文件指定行内容实例讲解
Mar 02 Python
使用anaconda安装pytorch的实现步骤
Sep 03 Python
Python内置函数及功能简介汇总
Oct 13 Python
简述python四种分词工具,盘点哪个更好用?
Apr 13 Python
python字符串的多行输出的实例详解
Jun 08 Python
python开发人人对战的五子棋小游戏
May 02 Python
python 使用pandas读取csv文件的方法
Dec 24 Python
python 生成任意形状的凸包图代码
Apr 16 #Python
Python telnet登陆功能实现代码
Apr 16 #Python
基于python 凸包问题的解决
Apr 16 #Python
python实现交并比IOU教程
Apr 16 #Python
python 弧度与角度互转实例
Apr 15 #Python
使用Python三角函数公式计算三角形的夹角案例
Apr 15 #Python
Python selenium自动化测试模型图解
Apr 15 #Python
You might like
PHP脚本数据库功能详解(下)
2006/10/09 PHP
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
2010/07/09 PHP
php魔术方法与魔术变量、内置方法与内置变量的深入分析
2013/06/03 PHP
PHP中strlen()和mb_strlen()的区别浅析
2014/06/19 PHP
ThinkPHP模板替换与系统常量及应用实例教程
2014/08/22 PHP
PHP生成推广海报的方法分享
2018/04/22 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
一个用js实现的页内搜索代码
2007/05/23 Javascript
谷歌浏览器 insertCell与appendChild的区别
2009/02/12 Javascript
JQuery 绑定事件时传递参数的实现方法
2009/10/13 Javascript
用js模拟JQuery的show与hide动画函数代码
2010/09/20 Javascript
jQuery筛选器children()案例详解(图文)
2013/02/17 Javascript
JavaScript 32位整型无符号操作示例
2013/12/08 Javascript
jquery判断元素的子元素是否存在的示例代码
2014/02/04 Javascript
javascript显式类型转换实例分析
2015/04/25 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
2015/12/17 Javascript
jquery 遍历数组 each 方法详解
2016/05/25 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
2020/11/16 Javascript
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
Python fileinput模块使用介绍
2014/11/30 Python
用Python写冒泡排序代码
2016/04/12 Python
python中print的不换行即时输出的快速解决方法
2016/07/20 Python
python爬虫爬取淘宝商品信息
2018/02/23 Python
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
python输出结果刷新及进度条的实现操作
2020/07/13 Python
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
2019/01/18 HTML / CSS
英国在线潜水商店:Simply Scuba
2019/03/25 全球购物
美国狗旅行和户外用品领先供应商:kurgo
2020/08/18 全球购物
高中微机老师自我鉴定
2014/02/16 职场文书
药店促销活动策划方案
2014/08/24 职场文书
立项申请报告范本
2015/05/15 职场文书
追讨欠款律师函
2015/05/27 职场文书
解析在浏览器地址栏输入一个URL后发生了什么
2021/06/21 Servers