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中运算符使用时的优先级
May 14 Python
Python中的异常处理相关语句基础学习笔记
Jul 11 Python
Python上下文管理器和with块详解
Sep 09 Python
浅谈Python由__dict__和dir()引发的一些思考
Oct 30 Python
django中静态文件配置static的方法
May 20 Python
python实现多张图片拼接成大图
Jan 15 Python
python实现贪吃蛇游戏
Mar 21 Python
Pandas中resample方法详解
Jul 02 Python
python正则表达式匹配IP代码实例
Dec 28 Python
Pytorch maxpool的ceil_mode用法
Feb 18 Python
Python爬虫小例子——爬取51job发布的工作职位
Jul 10 Python
python中温度单位转换的实例方法
Dec 27 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
ThinkPHP之R方法实例详解
2014/06/20 PHP
PHP中捕获超时事件的方法实例
2015/02/12 PHP
PHP文件下载实例代码浅析
2016/08/17 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
2017/09/30 PHP
phpstorm 配置xdebug的示例代码
2019/03/31 PHP
Node.js模拟浏览器文件上传示例
2014/03/26 Javascript
PHP PDO操作总结
2014/11/17 Javascript
JS访问DOM节点方法详解
2016/11/29 Javascript
JS生成和下载二维码的代码
2016/12/07 Javascript
Angular排序实例详解
2017/06/28 Javascript
VsCode插件整理(小结)
2017/09/14 Javascript
实现图片首尾平滑轮播(JS原生方法—节流)
2017/10/17 Javascript
vue 中滚动条始终定位在底部的方法
2018/09/03 Javascript
Mint UI实现A-Z字母排序的城市选择列表
2018/12/28 Javascript
Three.js实现简单3D房间布局
2018/12/30 Javascript
jQuery判断自定义属性data-val用法示例
2019/01/07 jQuery
nodejs读取图片返回给浏览器显示
2019/07/25 NodeJs
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
javascript实现简单留言板案例
2021/02/09 Javascript
pycharm 使用心得(九)解决No Python interpreter selected的问题
2014/06/06 Python
python中查看变量内存地址的方法
2015/05/05 Python
简单介绍Python中的floor()方法
2015/05/15 Python
Python利用前序和中序遍历结果重建二叉树的方法
2016/04/27 Python
python简单实现矩阵的乘,加,转置和逆运算示例
2019/07/10 Python
python检测服务器端口代码实例
2019/08/31 Python
Python字典的概念及常见应用实例详解
2019/10/30 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
2019/11/29 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
商务邀请函范文
2014/01/14 职场文书
采购类个人求职的自我评价
2014/02/18 职场文书
人力资源管理系自荐信
2014/05/31 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
解决MySQL存储时间出现不一致的问题
2021/04/28 MySQL
Python实现Hash算法
2022/03/18 Python
详解MySQL的主键查询为什么这么快
2022/04/03 MySQL