拯救pandas計(jì)劃(1)——將一維數(shù)組轉(zhuǎn)換為二維數(shù)組
拯救pandas計(jì)劃(1)——將一維數(shù)組轉(zhuǎn)換為二維數(shù)組
數(shù)據(jù)需求
需求拆解
數(shù)據(jù)導(dǎo)入
需求處理
方法一:pivot_table
方法二:unstack
總結(jié)
最近發(fā)現(xiàn)周?chē)暮芏嘈』锇閭兌疾惶珮?lè)意使用pandas,轉(zhuǎn)而投向其他的數(shù)據(jù)操作庫(kù),身為一個(gè)數(shù)據(jù)工作者,基本上是張口pandas,閉口pandas了,故而寫(xiě)下此系列以讓更多的小伙伴們愛(ài)上pandas。
系列文章說(shuō)明:
系列名(系列文章序號(hào))——此次系列文章具體解決的需求
平臺(tái):
windows 10 python 3.8 pandas 1.2.4
數(shù)據(jù)需求
將下方左邊紅框的數(shù)據(jù)轉(zhuǎn)置成右邊的形式。
首先,使用代碼并不是為了處理簡(jiǎn)單且一次性使用的場(chǎng)景,會(huì)得不償失,就如群友【心田有垢生荒草】在少量數(shù)據(jù)可以這樣操作,而數(shù)據(jù)量較大時(shí)改用pivot_table慘遭滑鐵盧:
對(duì)于這個(gè)需求乍一看,還挺容易弄的,但是沒(méi)有一些數(shù)據(jù)操作經(jīng)驗(yàn)的話(huà)還是有些許難度,有用過(guò)excel的小伙伴就會(huì)想到用透視表操作,但在我這,不得行,為了讓pandas重回?cái)?shù)據(jù)操作巔峰,我決定逝一逝。
需求拆解
從左圖到右圖很明顯的看到需要將tag_name中的所有數(shù)據(jù)作為新的列名,而period和simei應(yīng)該是唯一值。
數(shù)據(jù)導(dǎo)入
首先導(dǎo)入數(shù)據(jù):
需求處理
方法一:pivot_table
直接使用pivot_table會(huì)報(bào)數(shù)據(jù)不為數(shù)值型的錯(cuò)誤,其中aggfunc默認(rèn)參數(shù)為mean,無(wú)法操作字符串,為了能達(dá)到需求目的,需要自建一個(gè)函數(shù):
def?eval_func(x):
????return?x
df?=?pd.pivot_table(df,?values='tag_value2',?index=['period',?'simei'],?columns=['tag_name'],?aggfunc=eval_func).reset_index()
df.columns?=?df.columns.values
使用pivot_table調(diào)用eval_func,生成了一個(gè)有多級(jí)索引的透視表。
再重置索引,并重新設(shè)置列名,完成需求。
方法二:unstack
可以說(shuō)是能用pivot_table完成的,那用unstack做也不是不可。
df?=?df.set_index(['period',?'simei',?'tag_name']).unstack('tag_name')
df.columns?=?df.columns.get_level_values(1).values
df.reset_index()
為了能夠正確的將目標(biāo)列unstack至表頭,即設(shè)置成列名,需要先把需要處理的列設(shè)置成索引。
再對(duì)tag_name索引進(jìn)行 unstack() 轉(zhuǎn)成列名。
目前列部分為多層索引,紅框內(nèi)為多級(jí)索引,這里處理比較簡(jiǎn)單,先將列名的多層轉(zhuǎn)成一層,而且這個(gè)列名顯示的非常不友好,可以先打印出來(lái)看看是什么格式,再通過(guò)方法進(jìn)行特定值提取。
tag_value2和tag_name都在輸出值里,但是所需要的只有紅框的部分。調(diào)用 get_level_values() 獲取指定索引處的值并重設(shè)置為列名,再將多級(jí)索引進(jìn)行 reset_index() 完成需求。
總結(jié)
對(duì)大量數(shù)據(jù)的處理中,pandas不失為一個(gè)好幫手,本節(jié)例子僅僅展示了其冰山一角,對(duì)于這個(gè)需求處理也只是起到拋磚引玉的作用,再次感謝【心田有垢生荒草】提供數(shù)據(jù),如有更好的方法亦可在評(píng)論區(qū)留言或聯(lián)系作者進(jìn)行討論。
數(shù)據(jù)如海洋,努力找到前行的燈塔,才不會(huì)迷失自我。
于二零二二年一月六日作
