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找出那些被“标记”的照片
Apr 20 Python
python如何读写json数据
Mar 21 Python
基于python神经卷积网络的人脸识别
May 24 Python
python 字典中文key处理,读取,比较方法
Jul 06 Python
linux环境中没有网络怎么下载python
Jul 07 Python
Pandas分组与排序的实现
Jul 23 Python
Python爬虫使用浏览器cookies:browsercookie过程解析
Oct 22 Python
pandas实现将日期转换成timestamp
Dec 07 Python
python实现滑雪游戏
Feb 22 Python
python实现翻译word表格小程序
Feb 27 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
May 12 Python
python numpy中setdiff1d的用法说明
Apr 22 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 选项及相关信息函数库
2006/12/04 PHP
laravel 4安装及入门图文教程
2014/10/29 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
2019/08/27 PHP
Yii框架模拟组件调用注入示例
2019/11/11 PHP
javascript preload&lazy load
2010/05/13 Javascript
基于jQuery的模仿新浪微博时间的组件
2011/10/04 Javascript
javascript使用中为什么10..toString()正常而10.toString()出错呢
2013/01/11 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
调试代码导致IE出错的避免方法
2014/04/04 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
javascript运动框架用法实例分析(实现放大与缩小效果)
2016/01/08 Javascript
Angularjs中使用Filters详解
2016/03/11 Javascript
常用的js验证和数据处理总结
2016/08/02 Javascript
javascript history对象详解
2017/02/09 Javascript
Angular2利用组件与指令实现图片轮播组件
2017/03/27 Javascript
react系列从零开始_简单谈谈react
2017/07/06 Javascript
微信小程序实现animation动画
2018/01/26 Javascript
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
原生js实现移动端Touch轮播图的方法步骤
2019/01/03 Javascript
在Django框架中运行Python应用全攻略
2015/07/17 Python
Python使用redis pool的一种单例实现方式
2016/04/16 Python
Python遍历某目录下的所有文件夹与文件路径
2018/03/15 Python
Python 多维List创建的问题小结
2019/01/18 Python
Python3.4学习笔记之列表、数组操作示例
2019/03/01 Python
利用Python+阿里云实现DDNS动态域名解析的方法
2019/04/01 Python
详解Python中正则匹配TAB及空格的小技巧
2019/07/26 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
浅谈python之自动化运维(Paramiko)
2020/01/31 Python
Mac PyCharm中的.gitignore 安装设置教程
2020/04/16 Python
Pandas数据分析的一些常用小技巧
2021/02/07 Python
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
大女孩胸罩:Big Girls Bras
2016/12/15 全球购物
时尚孕妇装:Ingrid & Isabel
2019/05/08 全球购物
环保志愿者活动方案
2014/08/14 职场文书
2015新学期校长寄语(3篇)
2015/03/25 职场文书
如何用Navicat操作MySQL
2021/05/12 MySQL