2015-09-29 60 views
2

我有一個excel工作表,數據以下列方式存儲。有組織的熊貓數據框中的Excel表格

enter image description here

我想這個數據整理成數據幀的熊貓,使它看起來像下面...

enter image description here

有此格式的數據將讓我輕鬆使用數據透視表並進行分析。

如果在Excel中有一個簡單的方法來做到這一點,請讓我知道。 Python會是更好的選擇,因爲我有數百個這樣的表,每個表都有數百行和列。

回答

1

這就是我將如何解決Python的問題,雖然可能有一個更優雅的解決方案。

首先,我會用openpyxl

from openpyxl import load_workbook 

wb = load_workbook('data_so.xlsx') 
sheet_ranges = wb['Sheet1'] 

year = str(sheet_ranges['A1'].value) 
month = str(sheet_ranges['B1'].value) 

從那裏我找到了熊貓包的類型,你需要操作的非常有用的解析月/年值,設置多指數以便容易重塑(通過堆棧)。

import pandas as pd 
df = pd.read_excel('data_so.xlsx', skiprows=3) 

columns = pd.MultiIndex.from_tuples([('A', 'Price'), ('A', 'Quantity'), 
            ('B', 'Price'), ('B', 'Quantity'), 
            ('C', 'Price'), ('C', 'Quantity')], 
            names=['letters', 'index']) 

index = pd.MultiIndex.from_arrays(df.ix[:,:2].values.T,names=('Item', 'Code')) 
df2 = pd.DataFrame(df.ix[:,2:].values, columns=columns, index=index) 
df3 = df2.stack('letters').reset_index() 

然後,我們可以設置月和年,我們收集到的值:

df3['Year'] = year 
df3['Month'] = month 

Output d3

您可以進一步調用多指標和堆到價格和數量安排到你想要的東西。這不完全乾淨,但它解決了你的問題。

df3.index = pd.MultiIndex.from_arrays(df3[['Item','Code','letters','Year','Month']].values.T, 
             names=('Item', 'Code','letters','Year','Month')) 
df4 = df3[['Price','Quantity']].stack() 
df5 = pd.DataFrame(df4) 
df5.columns = ['Value'] 
df5.reset_index() 

df5 ouput

+0

的感謝!有用 :) –