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的print用法示例
Feb 11 Python
python根据给定文件返回文件名和扩展名的方法
Mar 27 Python
Python程序员面试题 你必须提前准备!
Jan 16 Python
Python3读取Excel数据存入MySQL的方法
May 04 Python
python检测IP地址变化并触发事件
Dec 26 Python
Django配置MySQL数据库的完整步骤
Sep 07 Python
pytorch 常用线性函数详解
Jan 15 Python
基于python求两个列表的并集.交集.差集
Feb 10 Python
django 扩展user用户字段inlines方式
Mar 30 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
May 25 Python
python爬取抖音视频的实例分析
Jan 19 Python
pytorch中的numel函数用法说明
May 13 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页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
2013/06/03 PHP
如何使用php输出时间格式
2013/08/31 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
2018/08/04 PHP
服务器安全设置的几个注册表设置
2007/07/28 Javascript
一个原生的用户等级的进度条
2010/07/03 Javascript
extjs tabpanel限制选项卡数量实现思路及代码
2013/04/02 Javascript
js操作label给label赋值及取label的值示例
2013/11/07 Javascript
通过复制Table生成word和excel的javascript代码
2014/01/20 Javascript
JavaScript中实现最高效的数组乱序方法
2014/10/11 Javascript
node.js中的fs.fstat方法使用说明
2014/12/15 Javascript
JavaScript 学习笔记之数据类型
2015/01/14 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
2015/05/29 Javascript
javaScript中with函数用法实例分析
2015/06/08 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
BootStrap和jQuery相结合实现可编辑表格
2016/04/21 Javascript
第四章之BootStrap表单与图片
2016/04/25 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
JavaScript定时器实现的原理分析
2016/12/06 Javascript
JS轮播图中缓动函数的封装
2020/11/25 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
JavaScript作用域链实例详解
2019/01/21 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
详解vue2.0模拟后台json数据
2019/05/16 Javascript
微信小程序云函数添加数据到数据库的方法
2020/03/04 Javascript
vuex的数据渲染与修改浅析
2020/11/26 Vue.js
Python树莓派学习笔记之UDP传输视频帧操作详解
2019/11/15 Python
GafasWorld西班牙:购买太阳镜、眼镜和隐形眼镜
2019/09/08 全球购物
材料员岗位职责
2014/03/13 职场文书
社区文化建设方案
2014/05/02 职场文书
2014年群众路线党员自我评议
2014/09/24 职场文书
新年晚会开场白
2015/05/29 职场文书
车间安全生产管理制度
2015/08/06 职场文书
创业计划书之健康营养产业
2019/10/15 职场文书
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
2021/03/29 PHP
十大好看的穿越动漫排名:《瑞克和莫蒂》第一,国漫《有药》在榜
2022/03/18 日漫
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android