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代码使其加快作用域内的查找
Mar 30 Python
Python3指定路径寻找符合匹配模式文件
May 22 Python
新手常见6种的python报错及解决方法
Mar 09 Python
python修改txt文件中的某一项方法
Dec 29 Python
对python特殊函数 __call__()的使用详解
Jul 02 Python
python basemap 画出经纬度并标定的实例
Jul 09 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
Aug 02 Python
python生成随机红包的实例写法
Sep 02 Python
python针对mysql数据库的连接、查询、更新、删除操作示例
Sep 11 Python
python实现连连看游戏
Feb 14 Python
python实现xml转json文件的示例代码
Dec 30 Python
Python爬虫基础之爬虫的分类知识总结
May 13 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 unset全局变量运用问题的深入解析
2013/06/17 PHP
PHP内置过滤器FILTER使用实例
2014/06/25 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
2015/07/29 PHP
PHP防止刷新重复提交页面的示例代码
2015/11/11 PHP
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
js prototype 格式化数字 By shawl.qiu
2007/04/02 Javascript
js 页面关闭前的出现提示的实现代码
2011/05/25 Javascript
JS连连看源码完美注释版(推荐)
2013/12/09 Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
2014/01/31 Javascript
举例详解AngularJS中ngShow和ngHide的使用方法
2015/06/19 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
Swiper实现轮播图效果
2017/07/03 Javascript
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
vue.extend实现alert模态框弹窗组件
2018/04/28 Javascript
nodejs分离html文件里面的js和css的方法
2019/04/09 NodeJs
[35:29]Secret vs VG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
Python3.0与2.X版本的区别实例分析
2014/08/25 Python
Python中的集合类型知识讲解
2015/08/19 Python
python模拟事件触发机制详解
2018/01/19 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
2019/12/04 Python
使用python写一个自动浏览文章的脚本实例
2019/12/05 Python
python自定义函数def的应用详解
2020/06/03 Python
阿里健康大药房:阿里自营网上药店
2017/08/01 全球购物
override和overload的区别
2016/03/09 面试题
计算机专业毕业生求职信分享
2013/12/24 职场文书
幼儿园教师奖惩制度
2014/02/01 职场文书
销售总经理岗位职责
2014/03/15 职场文书
五一促销活动总结
2014/07/01 职场文书
社会学专业求职信
2014/07/17 职场文书
高中学生自我评价范文
2014/09/23 职场文书
2014公司年终工作总结
2014/12/19 职场文书
学校社团活动总结
2015/05/07 职场文书
2019财务毕业实习报告
2019/06/27 职场文书
世界无敌的ICOM IC-R9500宽频接收机
2022/03/25 无线电