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开发windows GUI程序入门实例
Oct 23 Python
使用Python简单的实现树莓派的WEB控制
Feb 18 Python
获取Django项目的全部url方法详解
Oct 26 Python
Python+matplotlib绘制不同大小和颜色散点图实例
Jan 19 Python
TensorFlow实现卷积神经网络CNN
Mar 09 Python
对python中的pop函数和append函数详解
May 04 Python
对python读写文件去重、RE、set的使用详解
Dec 11 Python
python 调用有道api接口的方法
Jan 03 Python
python的reverse函数翻转结果为None的问题
May 11 Python
tensorflow模型转ncnn的操作方式
May 25 Python
基于OpenCV的路面质量检测的实现
Nov 04 Python
基于Python实现将列表数据生成折线图
Mar 23 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使用fopen创建utf8编码文件的方法
2014/10/31 PHP
PHP使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
PHP时间处理类操作示例
2018/09/05 PHP
在Laravel 中实现是否关注的示例
2019/10/22 PHP
根据分辨率不同,调用不同的css文件
2006/07/07 Javascript
jQuery 学习 几种常用方法
2009/06/11 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
关于extjs4如何获取grid修改后的数据的问题
2013/08/07 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
2013/12/08 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
纯javascript实现简单下拉刷新功能
2015/03/13 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
Vue.js一个文件对应一个组件实践
2016/10/27 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
2016/12/05 Javascript
Nodejs 发送Post请求功能(发短信验证码例子)
2017/02/09 NodeJs
jQuery validate 验证radio实例
2017/03/01 Javascript
JS组件系列之MVVM组件构建自己的Vue组件
2017/04/28 Javascript
微信小程序云开发实现数据添加、查询和分页
2019/05/17 Javascript
[01:04:14]OG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python sort、sorted高级排序技巧
2014/11/21 Python
Python的gevent框架的入门教程
2015/04/29 Python
在Python的Django框架中包装视图函数
2015/07/20 Python
python开发之tkinter实现图形随鼠标移动的方法
2015/11/11 Python
Python利用itchat对微信中好友数据实现简单分析的方法
2017/11/21 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
2018/05/26 Python
python 实现识别图片上的数字
2019/07/30 Python
Python如何实现后端自定义认证并实现多条件登陆
2020/06/22 Python
深入研究HTML5实现图片压缩上传功能
2016/03/25 HTML / CSS
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
护士见习期自我鉴定
2014/02/08 职场文书
体育教师自我鉴定
2014/02/12 职场文书
空中乘务员岗位职责
2014/03/08 职场文书
2015庆祝七一建党节94周年活动总结
2015/03/20 职场文书
2019入党申请书格式和范文
2019/06/25 职场文书
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL