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 05 Python
python3获取当前文件的上一级目录实例
Apr 26 Python
pandas DataFrame实现几列数据合并成为新的一列方法
Jun 08 Python
pandas实现将dataframe满足某一条件的值选出
Jun 12 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
Jun 21 Python
Django中使用极验Geetest滑动验证码过程解析
Jul 31 Python
使用Python的turtle模块画国旗
Sep 24 Python
python实现修改固定模式的字符串内容操作示例
Dec 30 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
Feb 03 Python
Python打印不合法的文件名
Jul 31 Python
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
Aug 07 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
Sep 04 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
图解上海144收音机
2021/03/02 无线电
php将会员数据导入到ucenter的代码
2010/07/18 PHP
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
PHP实现抓取迅雷VIP账号的方法
2015/07/30 PHP
拖动一个HTML元素
2006/12/22 Javascript
javascript 选择文件夹对话框(web)
2009/07/07 Javascript
JQuery Tips(4) 一些关于提高JQuery性能的Tips
2009/12/19 Javascript
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
JavaScript判断一个URL链接是否有效的实现方法
2011/10/08 Javascript
让table变成exls的示例代码
2014/03/24 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
JS+CSS实现简易的滑动门效果代码
2015/09/24 Javascript
jQuery往返城市和日期查询实例讲解
2015/10/09 Javascript
微信小程序中使元素占满整个屏幕高度实现方法
2016/12/14 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
通过npm引用的vue组件使用详解
2017/03/02 Javascript
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
全面介绍vue 全家桶和项目实例
2017/12/27 Javascript
Angular 开发学习之Angular CLI的安装使用
2017/12/31 Javascript
vue渲染时闪烁{{}}的问题及解决方法
2018/03/28 Javascript
vuejs项目打包之后的首屏加载优化及打包之后出现的问题
2018/04/01 Javascript
vue实现通讯录功能
2018/07/14 Javascript
监控Nodejs的性能实例代码
2019/07/02 NodeJs
vue集成chart.js的实现方法
2019/08/20 Javascript
基于VSCode调试网页JavaScript代码过程详解
2020/07/20 Javascript
ActiveMQ:使用Python访问ActiveMQ的方法
2019/01/30 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
python sklearn库实现简单逻辑回归的实例代码
2019/07/01 Python
基于Django集成CAS实现流程详解
2020/11/28 Python
澳大利亚排名第一的在线酒类商店:MyBottleShop
2018/04/26 全球购物
入职担保书怎么写
2014/05/12 职场文书
食品安全演讲稿
2014/09/01 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
德能勤绩工作总结
2015/08/11 职场文书
python数字转对应中文的方法总结
2021/08/02 Python
MySQL批量更新不同表中的数据
2022/05/11 MySQL