python 轉Excel二維表為一維表
阿新 • • 發佈:2019-01-02
今天研究一下使用python怎麼把excel二維錶轉化為一維表。檔名為二維表.xlsx的Sheet1資料來源:
二維表.xlsx的Sheet2要實現的結果:
import pandas as pd
df=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 pd from openpyxl import load_workbook df=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=wb writer.sheets=dict((ws.title,ws) for ws in wb.worksheets) df3.to_excel(writer,sheet_name='Sheet2',index=False) writer.save()
結果實現: