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之数据类型总结
Sep 24 Python
遍历python字典几种方法总结(推荐)
Sep 11 Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
Jun 07 Python
Django中ORM表的创建和增删改查方法示例
Nov 15 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
Mar 01 Python
详解python列表生成式和列表生成式器区别
Mar 27 Python
Python人脸识别第三方库face_recognition接口说明文档
May 03 Python
Python assert语句的简单使用示例
Jul 28 Python
python实现音乐播放器 python实现花框音乐盒子
Feb 25 Python
Python3 mmap内存映射文件示例解析
Mar 23 Python
Python matplotlib模块及柱状图用法解析
Aug 10 Python
详解matplotlib绘图样式(style)初探
Feb 03 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访问https示例分享
2014/01/17 PHP
PHP中的类型提示(type hinting)功能介绍
2015/07/01 PHP
PHP实现抓取迅雷VIP账号的方法
2015/07/30 PHP
php基于session锁防止阻塞请求的方法分析
2017/08/07 PHP
PHP数据库操作三:redis用法分析
2017/08/16 PHP
CI框架(CodeIgniter)操作redis的方法详解
2018/01/25 PHP
PHP 7.4 新语法之箭头函数实例详解
2019/05/09 PHP
xml 封装与解析(javascript和C#中)
2009/07/26 Javascript
javascript 处理null及null值示例
2014/06/09 Javascript
谈谈JavaScript类型系统之Math
2016/01/06 Javascript
JavaScript数据结构与算法之栈与队列
2016/01/29 Javascript
js实现简单的省市县三级联动效果实例
2016/02/18 Javascript
基于javascript实现简单的抽奖系统
2020/04/15 Javascript
在 Angular2 中实现自定义校验指令(确认密码)的方法
2017/01/23 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
2017/02/19 Javascript
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
微信小程序实现发送验证码按钮效果
2018/12/20 Javascript
mpvue微信小程序多列选择器用法之省份城市选择的实现
2019/03/07 Javascript
vue cli3 配置proxy代理无效的解决
2019/10/30 Javascript
解决Vue中使用keepAlive不缓存问题
2020/08/04 Javascript
Python安装第三方库的3种方法
2015/06/21 Python
浅析Python的web.py框架中url的设定方法
2016/07/11 Python
详解Python多线程
2016/11/14 Python
Python分治法定义与应用实例详解
2017/07/28 Python
利用Python实现原创工具的Logo与Help
2018/12/03 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
2019/01/15 Python
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
英国现代市场:ARKET
2019/04/10 全球购物
工业设计专业个人求职信范文
2013/12/28 职场文书
元旦获奖感言
2014/03/08 职场文书
感恩之星事迹材料
2014/05/03 职场文书
投标诚信承诺书
2014/05/26 职场文书
计算机网络及管理学专业求职信
2014/06/05 职场文书
物流业务员岗位职责
2015/04/03 职场文书
2019职场单身人才调研报告:互联网行业单身比例最高
2019/08/07 职场文书
Python利用folium实现地图可视化
2021/05/23 Python