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中使用__slots__方法的详细教程
Apr 28 Python
对numpy.append()里的axis的用法详解
Jun 28 Python
python使用opencv驱动摄像头的方法
Aug 03 Python
用python代码将tiff图片存储到jpg的方法
Dec 04 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
May 08 Python
在Pycharm中使用GitHub的方法步骤
Jun 13 Python
python Elasticsearch索引建立和数据的上传详解
Aug 04 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
Apr 01 Python
Python趣味挑战之用pygame实现简单的金币旋转效果
May 31 Python
Python中使用ipython的详细教程
Jun 22 Python
浅谈Python中的正则表达式
Jun 28 Python
Python连接Postgres/Mysql/Mongo数据库基本操作大全
Jun 29 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 $_FILES中error返回值详解
2014/01/30 PHP
async和DOM Script文件加载比较
2014/07/20 PHP
简单解决新浪SAE无法上传文件的问题
2015/05/13 PHP
php获取今日开始时间和结束时间的方法
2017/02/27 PHP
浅谈php://filter的妙用
2019/03/05 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
jQuery 位置插件
2008/12/25 Javascript
asp(javascript)全角半角转换代码 dbc2sbc
2009/08/06 Javascript
jQuery Dialog 弹出层对话框插件
2010/08/09 Javascript
网络之美 JavaScript中Get和Set访问器的实现代码
2010/09/19 Javascript
读取input:file的路径并显示本地图片的方法
2013/09/23 Javascript
php析构函数的具体用法小结
2014/03/11 Javascript
jQuery实现连续动画效果实例分析
2015/10/09 Javascript
vue2.0 computed 计算list循环后累加值的实例
2018/03/07 Javascript
JavaScript树的深度优先遍历和广度优先遍历算法示例
2018/07/30 Javascript
原生JS实现旋转轮播图+文字内容切换效果【附源码】
2018/09/29 Javascript
Vue.js中 v-model 指令的修饰符详解
2018/12/03 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
2018/12/06 Javascript
Vue.js如何使用Socket.IO的示例代码
2019/09/05 Javascript
通过angular CDK实现页面元素拖放的步骤详解
2020/07/01 Javascript
ant design pro中可控的筛选和排序实例
2020/11/17 Javascript
详解Python的Django框架中inclusion_tag的使用
2015/07/21 Python
python运行时间的几种方法
2016/06/17 Python
使用matplotlib中scatter方法画散点图
2019/03/19 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
Linux下通过python获取本机ip方法示例
2019/09/06 Python
化学教师自荐信范文
2013/12/28 职场文书
晚宴邀请函范文
2014/01/15 职场文书
创建卫生先进单位实施方案
2014/03/10 职场文书
社会工作专业求职信
2014/07/15 职场文书
汽车服务工程专业自荐信
2014/09/02 职场文书
2014年宣传部工作总结
2014/11/12 职场文书
租赁协议书
2015/01/27 职场文书
感恩教育观后感
2015/06/17 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书
vue实现可以快进后退的跑马灯组件
2022/04/08 Vue.js