python 資料分析實現長寬格式的轉換
阿新 • • 發佈:2020-05-20
我就廢話不多說了,大家還是直接看程式碼吧!
# 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','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','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:
下面是相互轉換的示例程式碼:
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','value') out: attr attr1 attr2 attr3 id id1 0 1 2 id2 3 4 5
以上這篇python 資料分析實現長寬格式的轉換就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。