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中的__SLOTS__属性使用示例
Feb 18 Python
Python通过poll实现异步IO的方法
Jun 04 Python
使用Python对微信好友进行数据分析
Jun 27 Python
Python中实例化class的执行顺序示例详解
Oct 14 Python
Python中is和==的区别详解
Nov 15 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
Aug 13 Python
Python Django 前后端分离 API的方法
Aug 28 Python
Linux下通过python获取本机ip方法示例
Sep 06 Python
python  logging日志打印过程解析
Oct 22 Python
keras得到每层的系数方式
Jun 15 Python
python安装读取grib库总结(推荐)
Jun 24 Python
Python实现哲学家就餐问题实例代码
Nov 09 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 header Content-Type类型小结
2011/07/03 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
PHP实现链式操作的原理详解
2016/09/16 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
php-fpm中max_children的配置
2019/03/15 PHP
如何让动态插入的javascript脚本代码跑起来。
2007/01/09 Javascript
学习jquery必备 api中英文对照的chm手册 下载
2007/05/03 Javascript
JavaScript 事件记录使用说明
2009/10/20 Javascript
Js(JavaScript)中,弹出是或否的选择框示例(confirm用法的实例分析)
2013/07/09 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
2015/02/02 Javascript
js+HTML5实现视频截图的方法
2015/06/16 Javascript
javascript日期计算实例分析
2015/06/29 Javascript
第七章之菜单按钮图标组件
2016/04/25 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
ES6概念 Symbol.keyFor()方法
2016/12/25 Javascript
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
JS实现的小火箭发射动画效果示例
2018/12/08 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
微信提示 在浏览器打开 效果实现过程解析
2019/09/10 Javascript
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
2020/04/22 Javascript
原生JS生成指定位数的验证码
2020/10/28 Javascript
wxpython学习笔记(推荐查看)
2014/06/09 Python
使用Python读写及压缩和解压缩文件的示例
2016/07/08 Python
python 按照固定长度分割字符串的方法小结
2018/04/30 Python
Python使用pyodbc访问数据库操作方法详解
2018/07/05 Python
Python Flask 搭建微信小程序后台详解
2019/05/06 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
Python根据字符串调用函数过程解析
2020/11/05 Python
HTML5响应式(自适应)网页设计的实现
2017/11/17 HTML / CSS
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
制药工程专业应届生求职信
2013/09/24 职场文书
文艺晚会策划方案
2014/06/11 职场文书
PYTHON使用Matplotlib去实现各种条形图的绘制
2022/03/22 Python