利用Python的pandas數據處理包將寬表變成窄表

前言

工作中經常會使用到將寬表變成窄表,例如這樣的形式

編號 編碼 單位1 單位2 單位3 單位4      
1 編碼1… 數量… 數量… 數量… 數量…      
2 編碼2… 數量… 數量… 數量… 數量…      

然而工作中,這樣查看數據不夠方便,往往需要窄表的形式,如下:

編碼 單位 數量
編碼1 單位1 數量1
編碼2 單位2 數量2
編碼3 單位3 數量3
…… …… ……

嘗試使用Excel中的lookup函數進行填充,較為麻煩還不能直接實現功能,剛好在自學Python,就查閱瞭資料,看看能不能使用Python強大的數據處理功能來實現這個需求。

pandas簡介:pandas=pannel data+ data analysis;最初被作為金融數據分析工具而開發出來的,pandas為時間序列分析提供瞭很好的支持。同是也能夠靈活處理缺失數據,為數據分析操作提供瞭更為便捷的手段。

話不多說,直接上jupyter代碼。

1.引入包

供處理分析使用,這步so easy!

import pandas as pd
import numpy as np
import os

2.加載數據並顯示。常規操作。

data=pd.read_excel('test.xls')
data.head()

自己的測試數據存在test.xls中,這個文件存儲在路徑不必考慮,直接將原始存儲的文件在jupyter中點upload上傳到裡根目錄裡就可以。

 顯示出來的,結果如圖所示:

3.關鍵操作,將寬表轉換為窄表

pd.set_option('display.max_rows', None)
df=pd.melt(data,id_vars="結算編碼",var_name="單位",value_name="數量")
df.head()

顯示結果如下, 可以看到數據顯示不全,還有空值,需要進一步進行處理操作。

 4.對空值進行處理

pd.set_option('display.max_rows', None)
#刪除所有值為空的行
df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False) 
#how字段可選有any和all,any表示隻要有空值出現就刪除,all表示全部為空值才刪除;inplace字段表示是否替換掉原本的數據
#刪除所有值為空的列
df.dropna(axis="columns",how="all",inplace=False)
df.dropna()

處理後的結果可以看到,數據顯示齊全,並已過濾處理掉瞭空值。 

 5.導出存儲到Excel中

file_dir = 'D:/program/write/'
exists = os.path.exists(file_dir)
 
if not exists:
 
    os.makedirs(file_dir)
df["結算編碼"]  = df["結算編碼"].astype(str) #設置單元格格式
df.dropna().to_excel(os.path.join(file_dir,"result3.xlsx"), sheet_name="處理結果")

處理後的存儲結果:

 結論:Python對數據處理分析真的操作簡單高效,後續可以多多嘗試使用Python來簡化辦公繁雜的程序,提升工作效率。

到此這篇關於利用Python的pandas數據處理包將寬表變成窄表的文章就介紹到這瞭,更多相關Python的pandas數據處理內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: