Python實(shí)現(xiàn)將橫表和縱表任意轉(zhuǎn)換的兩種方法
我們?nèi)粘W鰯?shù)據(jù)分析,接收到最多的表格是縱表,每個(gè)字段變量都有很長(zhǎng)數(shù)據(jù)的長(zhǎng)表,我們稱之為縱向數(shù)據(jù),但是,有時(shí)候,我們也會(huì)遇到橫表,稱之為橫向數(shù)據(jù),對(duì)于橫向數(shù)據(jù),我們會(huì)數(shù)據(jù)轉(zhuǎn)化,將其轉(zhuǎn)化為縱向數(shù)據(jù)進(jìn)行數(shù)據(jù)處理,下面一起來學(xué)習(xí)。
示例工具:anconda3.7
本文講解內(nèi)容:pandas數(shù)據(jù)重塑
適用范圍:在Python橫表與縱表轉(zhuǎn)化

首先導(dǎo)入我們本次案例使用的橫向數(shù)據(jù),從這里看出,橫向數(shù)據(jù)類似于Excel數(shù)據(jù)透視表得出的表,將''季度''這個(gè)字段拖入到列,就會(huì)得到橫表。

導(dǎo)入橫向數(shù)據(jù)如下,包含城市、年份等字段。
import pandas as pd wide_table=pd.read_excel(r'C:\Users\尚天強(qiáng)\Desktop\各城市銷量橫向數(shù)據(jù).xlsx') wide_table

橫表轉(zhuǎn)縱表
橫表轉(zhuǎn)縱表這里介紹兩種方法,一種是melt()方法,另一種是stack()方法,在melt()的參數(shù)中id_vars表示不需要被轉(zhuǎn)換的列名,除此之外剩下的列全部都要轉(zhuǎn)換,就不用寫了,var_name和value_name是自定義設(shè)置對(duì)應(yīng)的列名,轉(zhuǎn)為長(zhǎng)表的數(shù)據(jù)如下所示。
long_table=wide_table.melt(id_vars=["城市","年份"],var_name="季度",value_name="銷售量") long_table=long_table.sort_values(by=["城市","年份","銷售量"],ascending=False) long_table
使用stack()方法,首先將'城市','年份'設(shè)置為這組數(shù)據(jù)的索引,然后stack()將列索引轉(zhuǎn)換為行索引,最后reset_index()重置索引,修改一下列名,即可的得到與上面一樣的結(jié)果。
long_table=wide_table.set_index(['城市','年份']).stack().reset_index() long_table.columns=['城市','年份','季度','銷售量'] long_table

縱表轉(zhuǎn)橫表
縱表轉(zhuǎn)橫表就是使用前面介紹的數(shù)據(jù)透視的方法,看看Python如何做數(shù)據(jù)透視,這里使用pivot_table(),與Excel數(shù)據(jù)透視表類似,index放入行值,columns放入列值,values放入計(jì)算的值,然后重置索引,即可得到橫表的結(jié)果。
wide_table=long_table.pivot_table(index=['城市','年份'],columns='季度',values='銷售量').reset_index() wide_table=wide_table[['城市','年份','第一季度','第二季度','第三季度','第四季度']] wide_table
除此之外介紹一個(gè)SQL語(yǔ)法創(chuàng)建數(shù)據(jù)透視表的方法,這里導(dǎo)入pandasql庫(kù),sum結(jié)合case when函數(shù)判斷計(jì)算列值,然后group by進(jìn)行分組,即可得出如下的結(jié)果。
import pandasql as sql
sql.sqldf("""select 城市,年份,
sum(case when 季度="第一季度" then 銷售量 end) as "第一季度",
sum(case when 季度="第二季度" then 銷售量 end) as "第二季度",
sum(case when 季度="第三季度" then 銷售量 end) as "第三季度",
sum(case when 季度="第四季度" then 銷售量 end) as "第四季度"
from long_table
group by 城市,年份
order by 年份;""")
數(shù)據(jù)導(dǎo)出
本節(jié)的內(nèi)容相對(duì)比較簡(jiǎn)單,熟練掌握縱表和橫表的相互轉(zhuǎn)化方法,以及數(shù)據(jù)透視的方法,可以讓數(shù)據(jù)清洗變得尤為簡(jiǎn)單,數(shù)據(jù)表轉(zhuǎn)換后賦值變量,然后導(dǎo)出,數(shù)據(jù)結(jié)果如下所示。
table1=long_table
table2=sql.sqldf("""select 城市,年份,
sum(case when 季度="第一季度" then 銷售量 end) as "第一季度",
sum(case when 季度="第二季度" then 銷售量 end) as "第二季度",
sum(case when 季度="第三季度" then 銷售量 end) as "第三季度",
sum(case when 季度="第四季度" then 銷售量 end) as "第四季度"
from long_table
group by 城市,年份
order by 年份;""")
#數(shù)據(jù)導(dǎo)出
write=pd.ExcelWriter(r'C:\Users\尚天強(qiáng)\Desktop'+'\\Python轉(zhuǎn)置結(jié)果'+'.xlsx')
table1.to_excel(write,sheet_name='Python橫向轉(zhuǎn)縱向',index=False)
table2.to_excel(write,sheet_name='Python縱向轉(zhuǎn)橫向',index=False)
write.save()
write.close()
以上就是Python實(shí)現(xiàn)將橫表和縱表任意轉(zhuǎn)換的兩種方法的詳細(xì)內(nèi)容,更多關(guān)于Python橫表和縱表任意轉(zhuǎn)換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python調(diào)用本地ollama大模型實(shí)現(xiàn)智能語(yǔ)音助手
這篇文章主要為大家詳細(xì)介紹了Python如何調(diào)用本地ollama大模型實(shí)現(xiàn)智能語(yǔ)音助手,集成了語(yǔ)音錄制,語(yǔ)音識(shí)別等功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-05-05
修改Python?pip下載包的默認(rèn)路徑詳細(xì)步驟記錄
這篇文章主要介紹了如何修改pip的默認(rèn)安裝路徑以釋放C盤空間,特別是針對(duì)機(jī)器學(xué)習(xí)相關(guān)的大型包,可以將pip的安裝位置更改為其他目錄,需要的朋友可以參考下2025-03-03
Python編寫一個(gè)圖片自動(dòng)播放工具(過程詳解)
使用Python和Pygame庫(kù),可以編寫一個(gè)圖片自動(dòng)播放工具,實(shí)現(xiàn)圖片的加載、自動(dòng)循環(huán)播放及用戶交互功能,工具支持暫停、繼續(xù)、手動(dòng)切換圖片和調(diào)整播放速度,適合在電腦上方便地瀏覽和展示圖片,感興趣的朋友跟隨小編一起看看吧2024-09-09
Python實(shí)現(xiàn)aes加密解密多種方法解析
這篇文章主要介紹了Python實(shí)現(xiàn)aes加密解密多種方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
Python編程對(duì)列表中字典元素進(jìn)行排序的方法詳解
這篇文章主要介紹了Python編程對(duì)列表中字典元素進(jìn)行排序的方法,涉及Python針對(duì)列表及字典元素的遍歷、讀取、轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2017-05-05
jupyter notebook 多環(huán)境conda kernel配置方式
這篇文章主要介紹了jupyter notebook 多環(huán)境conda kernel配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04

