<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          拯救pandas計(jì)劃(1)——將一維數(shù)組轉(zhuǎn)換為二維數(shù)組

          共 1462字,需瀏覽 3分鐘

           ·

          2022-04-19 09:54

          拯救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ù)作為新的列名,而periodsimei應(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_value2tag_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ì)迷失自我。


          于二零二二年一月六日作


          瀏覽 155
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩无码成人三级片 | 插插视频 | 无码一区二区三区精品 | AV一区波多野结衣 | 一区二区三区三区无码 |