Excel表格到有组织的pandas数据框中

我有一个Excel工作表,数据以下面的方式存储。

在这里输入图像描述

我想将这些数据组织成一个pandas数据框,以便它看起来像下面这样…

在这里输入图像描述

像这样格式化数据将使我能够轻松地使用数据透视表并进行分析。

如果在Excel中有一个简单的方法,请让我知道。 Python会是更好的select,因为我有数百个像这样的表,每个都有数百行和列。

这是我将如何解决与Python的问题,虽然可能有一个更优雅的解决scheme。

首先,我将使用openpyxlparsingMonth / Year值

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) 

从那里,我发现pandas包非常有用的操作types,您需要设置多指标允许轻松重塑(通过堆栈)。

 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 

输出d3

您可以进一步调用MultiIndex和堆栈来安排价格和数量。 这不完全干净,但它解决了你的问题。

 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输出