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数组复制拷贝的实现方法
Jun 09 Python
Python线程详解
Jun 24 Python
Python中异常重试的解决方案详解
May 05 Python
Python中使用Counter进行字典创建以及key数量统计的方法
Jul 06 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
Python从Excel中读取日期一列的方法
Nov 28 Python
详解numpy的argmax的具体使用
May 27 Python
python中列表的切片与修改知识点总结
Jul 23 Python
Python传递参数的多种方式(小结)
Sep 18 Python
Python 实现OpenCV格式和PIL.Image格式互转
Jan 09 Python
Django实现文章详情页面跳转代码实例
Sep 16 Python
python 实现一个图形界面的汇率计算器
Nov 09 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
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
PHP Class&Object -- 解析PHP实现二叉树
2013/06/25 PHP
PHP 错误处理机制
2015/07/06 PHP
php实现评论回复删除功能
2017/05/23 PHP
javascript 面向对象编程  function是方法(函数)
2009/09/17 Javascript
简洁短小的 JavaScript IE 浏览器判定代码
2010/03/21 Javascript
window.print打印指定div指定网页指定区域的方法
2014/08/04 Javascript
Javascript基础教程之break和continue语句
2015/01/18 Javascript
jquery实现页面关键词高亮显示的方法
2015/03/12 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
纯CSS3代码实现滑动开关效果
2015/08/19 Javascript
Bootstrap创建可折叠的组件
2016/02/23 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
JS使用eval()动态创建变量的方法
2016/06/03 Javascript
详解JavaScript跨域总结与解决办法
2016/10/31 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
整理关于Bootstrap排版的慕课笔记
2017/03/29 Javascript
Bootstrap Table使用整理(一)
2017/06/09 Javascript
vue组件初学_弹射小球(实例讲解)
2017/09/06 Javascript
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
JavaScript实现瀑布流布局的3种方式
2020/12/27 Javascript
30分钟搭建Python的Flask框架并在上面编写第一个应用
2015/03/30 Python
Python向MySQL批量插数据的实例讲解
2018/03/31 Python
OpenCV+python手势识别框架和实例讲解
2018/08/03 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
2019/04/05 Python
pycharm运行程序时看不到任何结果显示的解决
2020/02/21 Python
Python可以实现栈的结构吗
2020/05/27 Python
Python Django搭建网站流程图解
2020/06/13 Python
Python如何读取、写入JSON数据
2020/07/28 Python
施华洛世奇英国官网:SWAROVSKI英国
2017/03/13 全球购物
丝芙兰波兰:Sephora.pl
2018/03/25 全球购物
中专毕业生自荐信范文
2013/11/28 职场文书
反邪教警示教育活动总结
2015/05/09 职场文书
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js