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获取文件版本信息、公司名和产品名的方法
Oct 05 Python
基于Python socket的端口扫描程序实例代码
Feb 09 Python
学习python分支结构
May 17 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
Sep 02 Python
如何基于python实现脚本加密
Dec 28 Python
在win64上使用bypy进行百度网盘文件上传功能
Jan 02 Python
什么是python的自省
Jun 21 Python
Python+OpenCV图像处理—— 色彩空间转换
Oct 22 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
Dec 13 Python
python实现发送QQ邮件(可加附件)
Dec 23 Python
Python绘制K线图之可视化神器pyecharts的使用
Mar 02 Python
Python 流媒体播放器的实现(基于VLC)
Apr 28 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的urlencode()URL编码函数浅析
2011/08/09 PHP
destoon各类调用汇总
2014/06/20 PHP
PHP 错误处理机制
2015/07/06 PHP
简单谈谈PHP vs Node.js
2015/07/17 PHP
详解WordPress中添加和执行动作的函数使用方法
2015/12/29 PHP
js 单引号 传递方法
2009/06/22 Javascript
多个datatable共存造成多个表格的checkbox都被选中
2013/07/11 Javascript
JavaScript定义类的几种方式总结
2014/01/06 Javascript
JQuery实现鼠标移动到图片上显示边框效果
2014/01/09 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
动态加载jQuery的方法
2015/06/16 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
纯js三维数组实现三级联动效果
2017/02/07 Javascript
JavaScript箭头函数_动力节点Java学院整理
2017/06/28 Javascript
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
2019/06/24 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
2019/07/10 jQuery
解决Can't find variable: SockJS vue项目的问题
2020/09/22 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
基于JavaScript实现简单扫雷游戏
2021/01/02 Javascript
vue+vant 上传图片需要注意的地方
2021/01/03 Vue.js
Python实现自动登录百度空间的方法
2017/06/10 Python
浅谈django的render函数的参数问题
2018/10/16 Python
python networkx 根据图的权重画图实现
2019/07/10 Python
Python实现手机号自动判断男女性别(实例解析)
2019/12/22 Python
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
美国体育用品商店:Academy Sports + Outdoors
2020/01/04 全球购物
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
党校学习自我鉴定
2014/02/24 职场文书
股份合作协议书
2014/04/12 职场文书
2014年老干部工作总结
2014/11/21 职场文书
顶岗实习协议书
2015/01/29 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书
使用css样式设计一个简单的html登陆界面的实现
2021/03/30 HTML / CSS
配置Kubernetes外网访问集群
2022/03/31 Servers