天天看點

Pivoting “long” to “wide” Format 将“長格式”旋轉為“寬格式” 書中開頭缺失的 ldata 變量之實作代碼

書中開頭内容如下:

英文版:

A common way to store multiple time series in databases and CSV is in so-called long

or stacked format:

In [116]: ldata[:10]

Out[116]:

date item value

0 1959-03-31 00:00:00 realgdp 2710.349

1 1959-03-31 00:00:00 infl 0.000

2 1959-03-31 00:00:00 unemp 5.800

3 1959-06-30 00:00:00 realgdp 2778.801

4 1959-06-30 00:00:00 infl 2.340

5 1959-06-30 00:00:00 unemp 5.100

6 1959-09-30 00:00:00 realgdp 2775.488

7 1959-09-30 00:00:00 infl 2.740

8 1959-09-30 00:00:00 unemp 5.300

9 1959-12-31 00:00:00 realgdp 2785.204

中文版:

時間序列資料通常是已所謂的“長格式”或“堆疊格式”存儲在資料庫和CSV中

ldata=pd.read_excel('data/data.xlsx')

print ldata

pivoted=ldata.pivot('date','item','value')

print pivoted

結果為:......

.........................

//。。。。。。。。。。。。。。。。。。。。分隔符。。。。。。。。。。。。。。。。。。。。。。。。。。。。、、//

以上文字是我在閱讀《利用Python進行資料分析》一書中在中文版第202頁(英文版第192頁)中發現該 ldata 在前文中完全沒有提及是如何實作的,譯者也提出了這個問題,對于如何實作該變量,隻給了一個小提示,沒有代碼,我上網谷歌也沒有發現源代碼,後來在原書附帶源碼中找到了該實作代碼,現在貼出來如下所示:

data = pd.read_csv('ch07/macrodata.csv')

periods = pd.PeriodIndex(year=data.year, quarter=data.quarter, name='date')

data = DataFrame(data.to_records(),

                 columns=pd.Index(['realgdp', 'infl', 'unemp'], name='item'),

                 index=periods.to_timestamp('D', 'end'))

ldata = data.stack().reset_index().rename(columns={0: 'value'})

wdata = ldata.pivot('date', 'item', 'value')