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 PIL模块与随机生成中文验证码
Feb 27 Python
python 把数据 json格式输出的实例代码
Oct 31 Python
Python基于回溯法子集树模板实现图的遍历功能示例
Sep 05 Python
Python使用三种方法实现PCA算法
Dec 12 Python
Python使用爬虫爬取静态网页图片的方法详解
Jun 05 Python
python操作excel的方法
Aug 16 Python
Python实现的在特定目录下导入模块功能分析
Feb 11 Python
Python序列化与反序列化pickle用法实例
Nov 11 Python
用Python去除图像的黑色或白色背景实例
Dec 12 Python
Python实现电视里的5毛特效实例代码详解
May 15 Python
python安装第三方库如xlrd的方法
Oct 31 Python
python中pow函数用法及功能说明
Dec 04 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中让curl支持sock5的代码实例
2015/01/21 PHP
javascript 一个函数对同一元素的多个事件响应
2009/07/25 Javascript
js的表单操作 简单计算器
2011/12/29 Javascript
JS Jquery 遍历,筛选页面元素 自动完成(实现代码)
2013/07/08 Javascript
jQuery动画效果-fadeIn fadeOut淡入浅出示例代码
2013/08/28 Javascript
选择复选框按钮置灰否则按钮可用
2014/05/22 Javascript
jQuery选择器用法实例详解
2015/12/17 Javascript
jQuery实现的跨容器无缝拖动效果代码
2016/06/21 Javascript
Javascript字符串常用方法详解
2016/07/21 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
JavaScript闭包和范围实例详解
2016/12/19 Javascript
js基于myFocus实现轮播图效果
2017/02/14 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
Axios学习笔记之使用方法教程
2017/07/21 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
基于layui数据表格以及传数据的方式
2018/08/19 Javascript
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
js+css实现扇形导航效果
2020/08/18 Javascript
vue将文件/图片批量打包下载zip的教程
2020/10/21 Javascript
Python开发的实用计算器完整实例
2017/05/10 Python
Java分治归并排序算法实例详解
2017/12/12 Python
50行Python代码实现人脸检测功能
2018/01/23 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
Python 字典中的所有方法及用法
2020/06/10 Python
基于tensorflow for循环 while循环案例
2020/06/30 Python
pytorch加载自己的图像数据集实例
2020/07/07 Python
美国正宗奢华复古手袋、珠宝及配饰网站:What Goes Around Comes Around
2018/07/21 全球购物
计算s=f(f(-1.4))的值
2014/05/06 面试题
服装销售人员求职自我评价
2013/09/26 职场文书
音乐系毕业生自荐信
2013/10/27 职场文书
意向协议书范本
2014/04/23 职场文书
《放飞蜻蜓》教学反思
2014/04/27 职场文书
低碳生活的宣传标语
2014/06/23 职场文书
中学教师师德师风承诺书
2015/04/28 职场文书
初三数学教学反思
2016/02/17 职场文书
PHP控制循环操作的时间
2021/04/01 PHP