今天研究一下使用python怎么把excel二维表转化为一维表。文件名为二维表.xlsx的Sheet1数据源:
二维表.xlsx的Sheet2要实现的结果:
import pandas as pddf=pd.read_excel('二维表.xlsx',sheet_name='Sheet1')得到数据源的数据帧:
我们再将第一列设置为索引,去掉默认的数字索引:
df1=df.set_index('品名/数量',drop=True)结果变成了:
我们再使用DataFrame的stack函数。我们来看一下数据帧stack函数的意思。
意思是将列标题转化为指定水平索引。也就是将横着的列转化为竖着的索引了。使用stack的结果返回的是一个含有多重索引Series.我们试一下例子。代码:
df2=df1.stack()返回的df2:
已经快接近目标了。df2是一个双重索引的Series.
我们要将这个回到最后的结果,需要在第一层索引加个默认的数值索引即可。有了第一层的索引约束,品名就能完全显示出来了。
代码:df3=df2.reset_index(),就实现了我们要的结果了。
调整一下标题,达到目的:
最后的写入Excel的完整代码,存数据到已经有数据的excel表里注意使用ExcelWriter的写法。不然已经存在的表格都会丢失。我已经翻过车了。写法如下:
# -*- coding: utf-8 -*-"""Created on Tue Nov 20 13:40:42 2018@author: FanXiaoLei"""import pandas as pdfrom openpyxl import load_workbookdf=pd.read_excel('二维表.xlsx',sheet_name='Sheet1')df1=df.set_index('品名/数量',drop=True)df2=df1.stack()df3=df2.reset_index()df3.columns=['品名','尺寸','数量']wb=load_workbook('二维表.xlsx')writer=pd.ExcelWriter('二维表.xlsx',engine='openpyxl')writer.book=wbwriter.sheets=dict((ws.title,ws) for ws in wb.worksheets)df3.to_excel(writer,sheet_name='Sheet2',index=False)writer.save()结果实现: