python 数据分析实现长宽格式的转换


Posted in Python onMay 18, 2020

我就废话不多说了,大家还是直接看代码吧!

# encoding=utf-8

import numpy as np
import pandas as pd

# 长宽格式的转换
# 1
data = pd.read_csv('d:data/macrodata.csv')
print 'data:=\n', data
print 'data.to_records():=\n', data.to_records()
print 'data.year:=\n', data.year
print 'data.quarter:=\n', data.quarter

periods = pd.PeriodIndex(year=data.year, quarter=data.quarter, name='date')
print 'periods:=\n', periods
data = pd.DataFrame(data.to_records(),
          columns=pd.Index(['realgdp', 'infl', 'unemp'], name='item'),
          index=periods.to_timestamp('D', 'end'))
print 'data:=\n', data
ldata = data.stack().reset_index().rename(columns={0: 'value'})
# print 'ldata:=\n', ldata
print 'ldata.get(\'realgdp\'):=\n', ldata.get('realgdp')
print 'ldata.get(\'unemp\'):=\n', ldata.get('unemp')
wdata = ldata.pivot('date', 'item', 'value')
print 'ldata:=\n', ldata
print 'wdata:=\n', wdata

# 2
print 'ldata[:10]:=\n', ldata[:10]
pivoted = ldata.pivot('date', 'item', 'value')
print 'pivoted:=\n', pivoted
print 'pivoted.head():=\n', pivoted.head()
print 'ldata:=\n', ldata
ldata['value2'] = np.random.randn(len(ldata))
print 'ldata[\'value2\']:=\n', ldata['value2']
print 'ldata[:10]:=\n', ldata[:10]
pivoted = ldata.pivot('date', 'item')
print 'pivoted:=\n', pivoted
print pivoted[:5]
print 'pivoted[\'value\'][:5]:=\n', pivoted['value'][:5]
print 'ldata:=\n', ldata
unstacked = ldata.set_index(['date', 'item']).unstack('item')
print 'unstacked:=\n', unstacked

print 'test'

补充知识:python使用_pandas_用stack和unstack进行行列重塑(key-value变宽表)

数据结构的重塑(reshape)

与数据库交互时常遇到堆叠格式(key-value)和宽表形式(dataframe)的转换,如:

堆叠格式:

python 数据分析实现长宽格式的转换

宽表形式dataframe:

python 数据分析实现长宽格式的转换

下面是相互转换的示例代码:

import pandas as pd
import numpy as np
 
 
# 常用的表格形式的数据结构
df = pd.DataFrame(np.arange(6).reshape((2,3)), index=['id1','id2'], columns=['attr1','attr2','attr3'])
print(df)
out:
  attr1 attr2 attr3
id1   0   1   2
id2   3   4   5
 
# 宽表形式(dataframe)转变为堆叠形式(key-value)形式
# 数据库中常以该形式存储
df_key_value = df.stack().reset_index()
df_key_value.columns = ['id', 'attr', 'value']
print(df_key_value)
out:
id	attr	value
0	id1	attr1	0
1	id1	attr2	1
2	id1	attr3	2
3	id2	attr1	3
4	id2	attr2	4
5	id2	attr3	5
 
# 堆叠转换为宽表形式
 
# 用set_index创建层次化索引,在用unstack重塑
# unstack中作为旋转轴的变量(如attr),其值会作为列变量展开
df_key_value.set_index(['id','attr']).unstack('attr')
out:
value
attr	attr1	attr2	attr3
id			
id1	0	1	2
id2	3	4	5
 
# 多层索引转化为宽表
df_long = df_key_value.set_index(['id','attr']).unstack('attr')['value'].reset_index()
df_long
out:
attr	id	attr1	attr2	attr3
0	id1	0	1	2
1	id2	3	4	5
 
# 堆叠转换为宽表的快捷键---pivot
df_key_value.pivot('id','attr','value')
out:
attr	attr1	attr2	attr3
id			
id1	0	1	2
id2	3	4	5

以上这篇python 数据分析实现长宽格式的转换就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
深入解析Python中的WSGI接口
May 11 Python
python中找出numpy array数组的最值及其索引方法
Apr 17 Python
利用pandas将numpy数组导出生成excel的实例
Jun 14 Python
学生信息管理系统python版
Oct 17 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
Dec 04 Python
Python Numpy库安装与基本操作示例
Jan 08 Python
PyQt弹出式对话框的常用方法及标准按钮类型
Feb 27 Python
Python 使用指定的网卡发送HTTP请求的实例
Aug 21 Python
解决python虚拟环境切换无效的问题
Apr 30 Python
哪种Python框架适合你?简单介绍几种主流Python框架
Aug 04 Python
Numpy中的数组搜索中np.where方法详细介绍
Jan 08 Python
Django对接elasticsearch实现全文检索的示例代码
Aug 02 Python
如何把外网python虚拟环境迁移到内网
May 18 #Python
python 实现 hive中类似 lateral view explode的功能示例
May 18 #Python
pandas dataframe 中的explode函数用法详解
May 18 #Python
Python pandas 列转行操作详解(类似hive中explode方法)
May 18 #Python
Win 10下Anaconda虚拟环境的教程
May 18 #Python
python异常处理之try finally不报错的原因
May 18 #Python
Pandas实现一列数据分隔为两列
May 18 #Python
You might like
php+MySQL判断update语句是否执行成功的方法
2014/08/28 PHP
解决nginx不支持thinkphp中pathinfo的问题
2015/07/21 PHP
PHP缓冲区用法总结
2016/02/14 PHP
浅谈Laravel中的三种中间件的作用
2019/10/13 PHP
jQuery拖拽插件gridster使用指南
2015/04/21 Javascript
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
2015/08/21 NodeJs
D3.js实现散点图和气泡图的方法详解
2016/09/21 Javascript
JavaScript 最佳实践:帮你提升代码质量
2016/12/03 Javascript
解析ajaxFileUpload 异步上传文件简单使用
2016/12/30 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
2017/01/04 Javascript
Vue.js实现表格动态增加删除的方法(附源码下载)
2017/01/20 Javascript
基于twbsPagination.js分页插件使用心得(分享)
2017/10/21 Javascript
vue中v-model动态生成的实例详解
2017/10/27 Javascript
jQuery第一次运行页面默认触发点击事件的实例
2018/01/10 jQuery
Express进阶之log4js实用入门指南
2018/02/10 Javascript
vue.js仿hover效果的实现方法示例
2019/01/28 Javascript
layui清除radio的选中状态实例
2019/11/14 Javascript
Vue ElementUI实现:限制输入框只能输入正整数的问题
2020/07/31 Javascript
React实现轮播效果
2020/08/25 Javascript
介绍Python中几个常用的类方法
2015/04/08 Python
Python极简代码实现杨辉三角示例代码
2016/11/15 Python
详解python中init方法和随机数方法
2019/03/13 Python
python日志logging模块使用方法分析
2019/05/23 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
2020/06/24 Python
python 元组和列表的区别
2020/12/30 Python
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
几个人围成一圈的问题
2013/09/26 面试题
软件测试工程师面试问题精选
2016/10/28 面试题
顺丰快递Java软件工程师面试题
2015/07/31 面试题
大学毕业自我鉴定范文
2014/02/03 职场文书
生育关怀行动实施方案
2014/03/26 职场文书
承诺书格式范文
2014/06/03 职场文书
人身损害赔偿协议书格式
2014/11/01 职场文书
2014年学生会工作总结范文
2014/11/07 职场文书
pytorch中的numel函数用法说明
2021/05/13 Python
MySQL之select、distinct、limit的使用
2021/11/11 MySQL