晚上在微信群看到有人提问:

这其实是数据处理中经常遇到的数据集「长」「宽」格式转换问题。看起来似乎挺难,有很多细节要考虑。实际上这个问题也的确不简单,如果从零开始码要花不少精力,效果还不好保证。

但是,因为这个问题太常见了,所以 Python / R 都提供了对应的函数来专门解决这个问题。

利用 Python 进行「长」「宽」转换

Python 的 pandas package 提供了.melt( ) / .pivot( )两个函数来做「长」「宽」转换。前者将宽数据集转换为长数据集,后者将长数据集转换为宽数据集。

import pandas as pd
data = {'username':['张三','李四','王五'],
'数学':[34,45,76],
'语文':[58,87,34],
'英语':[578,45,89]}
df = pd.DataFrame(data)
df

观察上表,我们很容易想到它还可以组织成 username,subject,score 这种形式:

melted = pd.melt(df,['username'])

一行代码就能实现我们想要的操作。 .melt( ) 接收两个参数,第一个参数是需要变换的数据集。第二个参数是一个列表,列表中指定的数据集的列作为分组的指标,剩下的所有列名合并为转换后的数据集的一列,默认列名是 variable。分组指标和列名共同定位一个唯一的值,所有的这些值合并为一列,默认列名是 value。

最后,按需对变换后的数据集重命名。

melted.rename(columns = {'variable':'subject','value':'score'})

.melt( ) 的逆操作是.pivot( )

pivoted = melted.pivot('username','subject','score')

.pivot() 的第一、二参数分别用作转换后的数据集行和列索引,可选列作为转换后的 dataframe 的值。如果不想将第一个参数作为行索引,可以将索引重置:

pivoted.columns = ['数学','英语','语文']
pivoted.reset_index()

利用 R 进行「长」「宽」转换

R 的 tidyr package 提供了 spread( )  / gather( )两个函数来做「长」「宽」转换。前者将宽数据集转换为长数据集,后者将长数据集转换为宽数据集。

library(tidyr)

data <- data.frame(username =c('张三','李四','王五'),        数学 =c(34,45,76),        语文 =c(58,87,34),        英语 =c(78,45,89))data复制代码

我们需要按照 username 将数学、语文、英文三个列名融合成一列 subject,并将对应的值融合成一列 score

gathered  <- data %>% gather(subject,score,-username)复制代码

gather() 的逆操作是 spread()

spreaded  <- gathered %>% spread(subject,score)复制代码

spread() 接收两个参数,第一个参数对应的列的值转换为宽数据集的列名,第二个参数对应的列的值转换为宽数据集新建列的值。

阅读原文可观看在线 Python /R 版本 notebook,亲自动手尝试使用 R 对数据集进行「长」「宽」转换。

扫码关注「数据科学与技术」(微信号:read_csv)

利用 Python / R 对数据集进行「长」「宽」转换相关推荐

  1. 利用python进行数据分析数据集_《利用Python进行数据分析》终章·数据分析案例·学习笔记(二)...

    一.第14章 数据分析案例 本书正文的最后一章,我们来看一些真实世界的数据集.对于每个数据集,我们会用之前介绍的方法,从原始数据中提取有意义的内容.展示的方法适用于其它数据集,也包括你的.本章包含了一 ...

  2. 数据分析实战:利用python对心脏病数据集进行分析

    我们都很害怕生病,但感冒发烧这种从小到大的疾病我们已经麻木了,因为一星期他就会好,但是随着长大,各种发炎.三高.心脏病.冠心病响应而生. 心脏病作为一种发作起来让人看了就觉得恐怖的疾病,每年不知道夺走 ...

  3. 数据分析实战:利用python对心脏病数据集进行分析!

    我们都很害怕生病,但感冒发烧这种从小到大的疾病我们已经麻木了,因为一星期他就会好,但是随着长大,各种发炎.三高.心脏病.冠心病响应而生. 心脏病作为一种发作起来让人看了就觉得恐怖的疾病,每年不知道夺走 ...

  4. python创建数据集_利用 python 在本地数据集创建训练集和测试集

    根据自己的数据集,自动划分训练集.测试集 举个栗子: 已经分好的文件: origin 文件夹有三类数据:good,bad,m,每类文件夹包含不同数量的图片,如下: 需要生成数据集的文件: 结果:根据设 ...

  5. python计算并返回任意多个整数的和_利用Python的多重处理方法计算一个长输入lin的整数和...

    使用Unix系统的一个名为forking的功能,您可以从父进程读取(而不是写入)数据,开销为零.通常,您将不得不复制数据,但是在Unix中分叉一个进程允许您绕过这个问题. 使用此方法,池中的作业可以访 ...

  6. python读取sas数据集_利用Python获取SAS和R自带数据集

    图:北京-奥森公园-2018年4月 无论是SAS.R还是Python,本身都自带一些数据集,对于初学者来说,可以通过这些自带的小数据集进行编程练习,无疑是非常方便的.SAS.R作为统计分析软件,本身自 ...

  7. 基于朴素贝叶斯分类器的西瓜数据集 2.0 预测分类_第十章:利用Python实现朴素贝叶斯模型

    免责声明:本文是通过网络收集并结合自身学习等途径合法获取,仅作为学习交流使用,其版权归出版社或者原创作者所有,并不对涉及的版权问题负责.若原创作者或者出版社认为侵权,请联系及时联系,我将立即删除文章, ...

  8. 利用Python对MNIST手写数据集进行数字识别(初学者入门级)

    利用Python对MNIST手写数据集进行数字识别 一.编程环境Jupyter Notebook Jupyter Notebook,之前被称为IPython notebook,是一个交互式的Web应用 ...

  9. 利用python将长视频、长语音转换成文字教程 ,非常好用

    原本自己想弄一个语音转文本的,但是发现很多博客都说的不是自己想要的,原因有以下几点:1.因为百度接口支持的语音是pcm格式,而自己的是.mp3格式的文件. 2.百度只支持60s内的文件格式,而自己想要 ...

最新文章

  1. webpack 最简打包结果分析
  2. Python 代码转 Latex 公式,这个开源库用一行代码帮你搞定
  3. python数据处理与机器学习
  4. 说说Javaweb 服务器与Tomcat源代码解析
  5. 如何调试后台作业 - how to debug background job
  6. springmvc中报错Request processing failed;
  7. ubuntu16.04 TLS安装java
  8. c语言220程序,电赛必备220个C语言实例源码分享
  9. pip安装python依赖成功,pycharm中import出错
  10. 迹中元素可交换性的证明tr(AB)=tr(BA)
  11. .NET单机软件保护策略(2)软件证书制作
  12. His系统数据库服务器关系,his系统数据库服务器
  13. Win10 LTSC 2019进入桌面时假死的拆中处理方法
  14. python中格式化输出是什么意思_Python中 {:.0f} 格式化输出,{0:^30}什么意思 . format(name))...
  15. windows 图片和传真查看器不能旋转
  16. 第39级台阶 蓝桥杯
  17. GJCTF 官方WP PWN部分
  18. android开发工具类之获得WIFI IP地址或者手机网络IP
  19. matlab批量导入excel表格数据,matlab导入excel表格数据-如何用matlab读取多个excel表格数据,将每个表格数......
  20. 欧几里得扩展欧几里得算法

热门文章

  1. 解决ftp的pasv模式下iptables设置问题
  2. 团队冲刺the second day
  3. RHEL6基础二十之RHEL文件挂载与卸载
  4. C#中的三种委托方式:Func委托,Action委托,Predicate委托
  5. 爱情麻辣烫防骗子—骗子谎称学生出事让家长汇款
  6. 深入浅出剖析 OpenCV 视觉处理
  7. java消费者中url找不到,java – URL可以使用浏览器访问,但是仍然是具有URLConnection的FileNotFoundException...
  8. java 常量区存放 new_java常量池与对象存储
  9. 使用Docker-容器命令案例2
  10. 为什么需要Survivor区?只有Eden不行吗?