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 str与repr的区别
Mar 23 Python
python遍历 truple list dictionary的几种方法总结
Sep 11 Python
Mac中升级Python2.7到Python3.5步骤详解
Apr 27 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
Jan 24 Python
Python实现iOS自动化打包详解步骤
Oct 03 Python
python实现二维数组的对角线遍历
Mar 02 Python
Python自定义一个异常类的方法
Jun 27 Python
python英语单词测试小程序代码实例
Sep 09 Python
Python实现快速排序的方法详解
Oct 25 Python
pytorch构建多模型实例
Jan 15 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
Sep 28 Python
方法汇总:Python 安装第三方库常用
Apr 26 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截取字符串之截取utf8或gbk编码的中英文字符串示例
2014/03/12 PHP
验证token、回复图文\文本、推送消息的实用微信类php代码
2016/06/28 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
2020/01/04 PHP
让div层随鼠标移动的实现代码 ie ff
2009/12/18 Javascript
jquery动态加载图片数据练习代码
2011/08/04 Javascript
浅析JavaScript中的常用算法与函数
2013/11/21 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
2014/01/31 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
JavaScript ES6的新特性使用新方法定义Class
2016/06/28 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
vue.js开发环境安装教程
2017/03/17 Javascript
angularjs路由传值$routeParams详解
2020/09/05 Javascript
详解性能更优越的小程序图片懒加载方式
2018/07/18 Javascript
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
javascript网页随机点名实现过程解析
2019/10/15 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
2020/08/06 Javascript
Python使用PyGreSQL操作PostgreSQL数据库教程
2014/07/30 Python
Python中的作用域规则详解
2015/01/30 Python
Pycharm学习教程(3) 代码运行调试
2017/05/03 Python
python简单图片操作:打开\显示\保存图像方法介绍
2017/11/23 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
Python散点图与折线图绘制过程解析
2019/11/30 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
2020/02/29 Python
Python在字符串中处理html和xml的方法
2020/07/31 Python
Pythonic版二分查找实现过程原理解析
2020/08/11 Python
python切片作为占位符使用实例讲解
2021/02/17 Python
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2013/01/09 HTML / CSS
现代绅士日常奢侈品:Todd Snyder
2019/12/13 全球购物
办公室人员先进事迹
2014/01/27 职场文书
家长对学生的评语
2014/04/18 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书
机关单位2016年法制宣传日活动总结
2016/04/01 职场文书
基于angular实现树形二级表格
2021/10/16 Javascript
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL