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 开发Activex组件方法
Nov 08 Python
Django框架下在视图中使用模版的方法
Jul 16 Python
深入学习Python中的上下文管理器与else块
Aug 27 Python
Python实现简单的HttpServer服务器示例
Sep 25 Python
python中如何使用正则表达式的集合字符示例
Oct 09 Python
Python绘制3D图形
May 03 Python
Python列表与元组的异同详解
Jul 02 Python
django 消息框架 message使用详解
Jul 22 Python
Python DataFrame一列拆成多列以及一行拆成多行
Aug 06 Python
Python 实现OpenCV格式和PIL.Image格式互转
Jan 09 Python
python实现TCP文件传输
Mar 20 Python
通过cmd进入python的步骤
Jun 16 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垃圾代码优化操作代码
2010/08/05 PHP
基于header的一些常用指令详解
2013/06/06 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
PHP PDOStatement::execute讲解
2019/01/31 PHP
YUI Compressor压缩JavaScript原理及微优化
2013/01/07 Javascript
jQuery模拟超链接点击效果代码
2013/04/21 Javascript
javascript函数重载解决方案分享
2014/02/19 Javascript
学习javascript面向对象 javascript实现继承的方式
2016/01/04 Javascript
angularjs 源码解析之injector
2016/08/22 Javascript
Vue.JS入门教程之自定义指令
2016/12/08 Javascript
jQuery图片轮播功能实例代码
2017/01/29 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
2017/08/14 jQuery
微信小程序录音与播放录音功能
2017/12/25 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
layer实现弹出层自动调节位置
2019/09/05 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
2020/06/02 Javascript
解决ant-design-vue中menu菜单无法默认展开的问题
2020/10/31 Javascript
[29:23]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场1
2014/05/23 DOTA
[01:15:29]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第三局
2016/03/04 DOTA
[01:09:01]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第一场 10.28
2020/10/28 DOTA
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
python学习笔记之调用eval函数出现invalid syntax错误问题
2015/10/18 Python
python发送邮件功能实现代码
2016/07/15 Python
Python编写一个优美的下载器
2018/04/15 Python
Python常用模块logging——日志输出功能(示例代码)
2019/11/20 Python
Python安装与卸载流程详细步骤(图解)
2020/02/20 Python
Python使用type动态创建类操作示例
2020/02/29 Python
python 装饰器功能与用法案例详解
2020/03/06 Python
python爬虫容易学吗
2020/06/02 Python
使用OpenCV对车道进行实时检测的实现示例代码
2020/06/19 Python
Python爬虫爬取微信朋友圈
2020/08/06 Python
法学专业个人求职信
2013/09/26 职场文书
妇科医生自荐信
2013/11/05 职场文书
装修致歉信
2014/01/15 职场文书
管理提升方案
2014/06/04 职场文书
三好学生评选事迹材料(2016精选版)
2016/02/25 职场文书