1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        拯救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)的話還是有些許難度,有用過(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)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            韩日无码视频 | 黑人大香蕉 | 男女一起免费观看男女做爱视频网站 | 国产精品27p | 五月天六月色 | av资源在线播放 不用播放器av | 巨乳美女做爱 | 日韩黄片视频 | 云缨的堕落h嗯啊好深啊 | 国产无套精品久久久久久浪潮 |