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实现文本去重且不打乱原本顺序
Jan 26 Python
浅析Python装饰器以及装饰器模式
May 28 Python
对python中for、if、while的区别与比较方法
Jun 25 Python
numpy添加新的维度:newaxis的方法
Aug 02 Python
对python列表里的字典元素去重方法详解
Jan 21 Python
Python3实现的反转单链表算法示例
Mar 08 Python
对Python的交互模式和直接运行.py文件的区别详解
Jun 29 Python
Python如何获取Win7,Win10系统缩放大小
Jan 10 Python
python实现小程序推送页面收录脚本
Apr 20 Python
pycharm + django跨域无提示的解决方法
Dec 06 Python
python上下文管理的使用场景实例讲解
Mar 03 Python
Python中三种花式打印的示例详解
Mar 19 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版国家代码、缩写查询函数代码
2011/08/14 PHP
php创建sprite
2014/02/11 PHP
php中使用PHPExcel读写excel(xls)文件的方法
2014/09/15 PHP
增强的 JavaScript 的 trim 函数的代码
2007/08/13 Javascript
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
2012/10/11 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
2016/08/23 Javascript
javascript使用闭包模拟对象的私有属性和方法
2016/10/05 Javascript
js实现背景图自适应窗口大小
2017/01/10 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
Javascript的console['']常用输入方法汇总
2018/04/26 Javascript
详解Ubuntu安装angular-cli遇到的坑
2018/09/08 Javascript
详解基于mpvue微信小程序下载远程图片到本地解决思路
2019/05/16 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
浅析JavaScript预编译和暗示全局变量
2020/09/03 Javascript
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
python使用json序列化datetime类型实例解析
2018/02/11 Python
Python去除、替换字符串空格的处理方法
2018/04/01 Python
基于python的itchat库实现微信聊天机器人(推荐)
2019/10/29 Python
python输出pdf文档的实例
2020/02/13 Python
python和JavaScript哪个容易上手
2020/06/23 Python
基于python实现计算两组数据P值
2020/07/10 Python
python推导式的使用方法实例
2021/02/28 Python
html5将图片转换成base64的实例代码
2016/09/21 HTML / CSS
如何强制垃圾回收
2015/10/06 面试题
高级方案规划工程师岗位职责
2013/11/29 职场文书
个人素质的自我评价分享
2013/12/16 职场文书
信息技术教学反思
2014/02/12 职场文书
晨会主持词
2014/03/17 职场文书
供应链金融服务方案
2014/05/25 职场文书
党员“四风”方面存在问题及整改措施
2014/09/24 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
幼儿园庆六一主持词
2015/06/30 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书
手写实现JS中的new
2021/11/07 Javascript
iOS 16进一步确认,一共支持16款iPhone
2022/04/28 数码科技