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之总结参数的传递
Oct 10 Python
详细解析Python当中的数据类型和变量
Apr 25 Python
python实现人民币大写转换
Jun 20 Python
Python 中的lambda函数介绍
Oct 10 Python
用python一行代码得到数组中某个元素的个数方法
Jan 28 Python
pandas如何处理缺失值
Jul 31 Python
Python日志syslog使用原理详解
Feb 18 Python
不到20行实现Python代码即可制作精美证件照
Apr 24 Python
Python基于paramunittest模块实现excl参数化
Apr 26 Python
keras 获取某层输出 获取复用层的多次输出实例
May 23 Python
Python爬虫之Selenium实现窗口截图
Dec 04 Python
python中的random模块和相关函数详解
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/09/05 PHP
php+jquery编码方面的一些心得(utf-8 gb2312)
2010/10/12 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
php 无限分类 树形数据格式化代码
2016/10/11 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
2017/02/06 PHP
Javascript 构造函数,公有,私有特权和静态成员定义方法
2009/11/30 Javascript
javascript preload&lazy load
2010/05/13 Javascript
javascript权威指南 学习笔记之变量作用域分享
2011/09/28 Javascript
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
封装的jquery翻页滚动(示例代码)
2013/11/18 Javascript
禁用页面部分JavaScript不是全部而是部分
2014/09/03 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
nodejs通过phantomjs实现下载网页
2015/05/04 NodeJs
简单实现JS对dom操作封装
2015/12/02 Javascript
基于javascript制作微博发布栏效果
2016/04/04 Javascript
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
2017/05/30 Javascript
Vue单文件组件基础模板小结
2017/08/10 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
2018/03/14 Javascript
javascript实现日历效果
2019/06/17 Javascript
JS控制GIF图片的停止与显示
2019/10/24 Javascript
PYTHON基础-时间日期处理小结
2018/05/05 Python
解决Django migrate No changes detected 不能创建表的问题
2018/05/27 Python
pycharm运行出现ImportError:No module named的解决方法
2018/10/13 Python
keras之权重初始化方式
2020/05/21 Python
给Django Admin添加验证码和多次登录尝试限制的实现
2020/07/26 Python
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
Beauty Expert美国/加拿大:购买奢侈美容产品
2018/12/05 全球购物
美国手机支架公司:PopSockets
2019/11/27 全球购物
为什么说Ruby是一种真正的面向对象程序设计语言
2012/10/30 面试题
企业行政文员岗位职责
2013/12/03 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
关于运动会的广播稿
2014/09/22 职场文书
自愿离婚协议书2015
2015/01/26 职场文书
大学生个人总结范文
2015/02/15 职场文书
幼儿园教师个人工作总结2015
2015/05/12 职场文书
联想win10摄像头打不开怎么办?win10笔记本摄像头打不开解决办法
2022/04/08 数码科技