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 BeautifulSoup使用方法详解
Nov 21 Python
Python与Redis的连接教程
Apr 22 Python
python简单判断序列是否为空的方法
Jun 30 Python
使用python生成目录树
Mar 29 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
Jan 30 Python
Django CBV与FBV原理及实例详解
Aug 12 Python
python批量替换文件名中的共同字符实例
Mar 05 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
May 07 Python
解决运行出现'dict' object has no attribute 'has_key'问题
Jul 15 Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
Nov 11 Python
使用python向MongoDB插入时间字段的操作
May 18 Python
python自动化测试通过日志3分钟定位bug
Nov 20 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
检测png图片是否完整的php代码
2010/09/06 PHP
PHP统计目录下的文件总数及代码行数(去除注释及空行)
2011/01/17 PHP
探讨php中遍历二维数组的几种方法详解
2013/06/08 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(五)
2014/06/23 PHP
Yii使用CLinkPager分页实例详解
2014/07/23 PHP
Yii框架连接mongodb数据库的代码
2016/07/27 PHP
thinkPHP模板中for循环与switch语句用法示例
2016/11/30 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
Javascript调用C#代码
2011/01/17 Javascript
为何JS操作的href都是javascript:void(0);呢
2015/11/12 Javascript
AngularJS实现元素显示和隐藏的几个案例
2015/12/09 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
2016/08/11 Javascript
微信小程序 实战小程序实例
2016/10/08 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
简单的JS控制button颜色随点击更改的实现方法
2017/04/17 Javascript
JavaScript闭包_动力节点Java学院整理
2017/06/27 Javascript
基于jQuery对象和DOM对象和字符串之间的转化实例
2017/08/08 jQuery
对angularJs中controller控制器scope父子集作用域的实例讲解
2018/10/08 Javascript
javascript面向对象三大特征之封装实例详解
2019/07/24 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
2020/04/11 Javascript
Javascript异步执行不按顺序解决方案
2020/04/30 Javascript
[49:56]VG vs Optic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
python encrypt 实现AES加密的实例详解
2020/02/20 Python
python实现PCA降维的示例详解
2020/02/24 Python
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
三星美国官网:Samsung美国
2017/02/06 全球购物
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
c/c++某大公司的两道笔试题
2014/02/02 面试题
社保委托书怎么写
2014/08/02 职场文书
局领导领导班子四风对照检查材料
2014/09/27 职场文书
2014年保育员工作总结
2014/12/02 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
教师聘用意向书
2015/05/11 职场文书
情侣餐厅的创业计划书范本!
2019/07/26 职场文书
CSS3通过var()和calc()函数实现动画特效
2021/03/30 HTML / CSS