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 常用string函数(收藏)
May 30 Python
Python找出list中最常出现元素的方法
Jun 14 Python
Django原生sql也能使用Paginator分页的示例代码
Nov 15 Python
[原创]python爬虫(入门教程、视频教程)
Jan 08 Python
python 编写简单网页服务器的实例
Jun 01 Python
python爬虫豆瓣网的模拟登录实现
Aug 21 Python
python安装本地whl的实例步骤
Oct 12 Python
python通过实例讲解反射机制
Oct 17 Python
pytorch模型存储的2种实现方法
Feb 14 Python
使用pandas库对csv文件进行筛选保存
May 25 Python
Python 列表推导式需要注意的地方
Oct 23 Python
Python制作简单的剪刀石头布游戏
Dec 10 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 empty函数判断mysql表单是否为空
2010/04/12 PHP
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
简单的php数据库操作类代码(增,删,改,查)
2013/04/08 PHP
PDO防注入原理分析以及注意事项
2015/02/25 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
2016/03/04 PHP
PHP基于自定义函数生成笛卡尔积的方法示例
2017/09/30 PHP
JavaScript中令你抓狂的魔术变量
2006/11/30 Javascript
[原创]来自ImageSee官方 JavaScript图片浏览器
2008/01/16 Javascript
利用jQuery的$.event.fix函数统一浏览器event事件处理
2009/12/21 Javascript
JS中setTimeout()的用法详解
2013/04/14 Javascript
js保留两位小数使用toFixed实现
2013/07/29 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
HTML Color Picker(js拾色器效果)
2013/08/27 Javascript
Jquery幻灯片特效代码分享--打开页面随机选择切换方式(3)
2015/08/15 Javascript
js+canvas绘制五角星的方法
2016/01/28 Javascript
Bootstrap前端开发案例二
2016/06/17 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
利用jQuery实现滑动开关按钮效果(附demo源码下载)
2017/02/07 Javascript
在vue中实现简单页面逆传值的方法
2017/11/27 Javascript
浅谈小程序 setData学问多
2019/02/20 Javascript
js实现登录拖拽窗口
2020/02/10 Javascript
[06:01]刀塔次级联赛top10第一期
2014/11/07 DOTA
[04:16]完美世界DOTA2联赛PWL S2 集锦第一期
2020/11/23 DOTA
python中的字典操作及字典函数
2018/01/03 Python
Numpy数组转置的两种实现方法
2018/04/17 Python
浅谈python3.x pool.map()方法的实质
2019/01/16 Python
django删除表重建的实现方法
2019/08/28 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
2020/05/13 Python
Python实现手势识别
2020/10/21 Python
Python自动化办公Excel模块openpyxl原理及用法解析
2020/11/05 Python
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
opencv实现图像几何变换
2021/03/24 Python
三年级评语大全
2014/04/23 职场文书
环境整治工作方案
2014/05/18 职场文书
咖啡厅商业计划书
2014/09/15 职场文书
村支部书记群众路线对照检查材料思想汇报
2014/10/08 职场文书