我就废话不多说了,大家还是直接看代码吧!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# 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)的转换,如:
堆叠格式:
宽表形式dataframe:
下面是相互转换的示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
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 数据分析实现长宽格式的转换就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/u013043762/article/details/79180374