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中requirements.txt的一切
Mar 03 Python
Python构建网页爬虫原理分析
Dec 19 Python
Tornado 多进程实现分析详解
Jan 12 Python
tensorflow中next_batch的具体使用
Feb 02 Python
使用Python对微信好友进行数据分析
Jun 27 Python
对python csv模块配置分隔符和引用符详解
Dec 12 Python
Python3+Appium安装使用教程
Jul 05 Python
Pytorch实现基于CharRNN的文本分类与生成示例
Jan 08 Python
在django项目中导出数据到excel文件并实现下载的功能
Mar 13 Python
python多进程下的生产者和消费者模型
May 07 Python
浅谈Python协程
Jun 17 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
Feb 23 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中Session的概念
2006/10/09 PHP
Laravel执行migrate命令提示:No such file or directory的解决方法
2016/03/16 PHP
php rsa 加密,解密,签名,验签详解
2016/12/06 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
一个js实现的所谓的滑动门
2007/05/23 Javascript
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
javascript textarea光标定位方法(兼容IE和FF)
2011/03/12 Javascript
jQuery表单验证插件formValidator(改进版)
2012/02/03 Javascript
jQuery的Ajax的自动完成功能控件简要说明
2013/02/22 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
2013/04/24 Javascript
JS实现可调整倒计时间代码分享
2015/08/18 Javascript
Vue中的ref作用详解(实现DOM的联动操作)
2017/08/21 Javascript
jQuery实现注册会员时密码强度提示信息功能示例
2017/09/05 jQuery
微信小程序支付及退款流程详解
2017/11/30 Javascript
详解webpack打包nodejs项目(前端代码)
2018/09/19 NodeJs
发布Angular应用至生产环境的方法
2018/12/10 Javascript
vuejs实现下拉框菜单选择
2020/10/23 Javascript
Python判断列表是否已排序的各种方法及其性能分析
2016/06/20 Python
Python模拟登录的多种方法(四种)
2018/06/01 Python
基于Python pip用国内镜像下载的方法
2018/06/12 Python
pandas将numpy数组写入到csv的实例
2018/07/04 Python
python对于requests的封装方法详解
2019/01/03 Python
PyCharm在新窗口打开项目的方法
2019/01/17 Python
Python Pandas 如何shuffle(打乱)数据
2019/07/30 Python
使用python实现微信小程序自动签到功能
2020/04/27 Python
解决python 输出到csv 出现多空行的情况
2021/03/24 Python
英语专业个人求职自荐信
2013/09/21 职场文书
某同学的自我鉴定范文
2013/12/26 职场文书
运动会解说词100字
2014/01/31 职场文书
服务口号大全
2014/06/11 职场文书
竞选班干部演讲稿100字
2014/08/20 职场文书
赔偿协议书范本
2014/09/12 职场文书
教师党员个人剖析材料
2014/09/29 职场文书
学生会主席任命书
2015/09/21 职场文书