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>

        Python處理Excel&CSV文件

        共 2488字,需瀏覽 5分鐘

         ·

        2020-01-02 23:22

        咪哥雜談


        ba00ba9551b222e9f88809aa768b5528.webp

        本篇閱讀時(shí)間約為 5 分鐘。


        1

        前言


        在今年很早的時(shí)候,寫過(guò)一篇用?Python 玩 Excel 的文章,可以回顧《Python操作 excel ?應(yīng)該這么玩!


        當(dāng)時(shí)介紹了用 Pandas 庫(kù)玩股票,在 Excel 中畫出一個(gè)圖來(lái)。


        現(xiàn)在有了前幾天爬取的王者榮耀 csv 文件,還需要用 pandas 庫(kù)來(lái)操作處理下。


        實(shí)戰(zhàn)中去體會(huì)這些第三方庫(kù)的使用技巧,印象才會(huì)比較深刻。


        2

        環(huán)境準(zhǔn)備


        開始之前,首先確保你安裝了 pandas 庫(kù)。


        pip install pandas


        簡(jiǎn)單用官網(wǎng)介紹的文字來(lái)說(shuō)明下,何為 pandas?


        Pandas是一個(gè)開源的,BSD許可的庫(kù),為Python編程語(yǔ)言提供高性能,易于使用的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具。


        https://www.pypandas.cn/intro/

        pandas中文官網(wǎng)


        3

        處理數(shù)據(jù)


        有些時(shí)候,使用一些工具類的庫(kù),如何才能更好地練手?
        一旦有了使用場(chǎng)景,那么,便是最好的練手機(jī)會(huì)。(再次強(qiáng)調(diào))

        現(xiàn)在我的需求很明確了:

        有一個(gè)王者榮耀的 csv 數(shù)據(jù),我需要將其讀取到,然后將字典類型變成列,同時(shí),需要讓頭像下載后自動(dòng)寫進(jìn) Excel 中。

        而 Excel 的數(shù)據(jù)最終會(huì)提供給玩王者的朋友們,?也為了后續(xù)的分析用。


        1. ?pd.read_csv()


        import pandas as pddf = pd.read_csv(path)??#?讀取 csv 文件,看返回的是什么?


        打個(gè)斷點(diǎn)看下,df最終返回的結(jié)果:


        13a709f4cc96da3e3eabe1ddefefed49.webp


        查看 debug 面板,df 的類型是 DataFrame。


        0ae3b3a5ca0af2b8d6e37476ca62b031.webp


        來(lái)看下官網(wǎng)是如何介紹的?


        fba6d1d66e4a0e123307f2ccd2fcd7d3.webp

        如果還不理解,你可以把 DataFrame 想成 Excel 中的 Sheet 頁(yè),它有著行和列,所以稱之為二維異構(gòu)表格。


        2.?df['列名'] 獲取單列


        在原來(lái)的 csv 中,有兩列是字典類型的,現(xiàn)在需要將每列的每行數(shù)據(jù)取出來(lái),并且生成新的列,而列名就是字典中的 key ,單列的每行數(shù)據(jù)則是字典中的 value。

        attr_details_data_dict?=?df['attr_details_data_dict']??#?獲取單列



        86a3dba86a462849225cfaaac33fab54.webp


        取出來(lái)則是單列,而類型是 Series ,一維同構(gòu)數(shù)組。(看上面官方的圖介紹)

        3.?pd.DataFrame(dict) 創(chuàng)建新的DataFrame


        detail_col_list = []for detail_str in attr_details_data_dict:    detail_df = pd.DataFrame(json.loads(detail_str), index=[0])    detail_col_list.append(detail_df)


        不難發(fā)現(xiàn),現(xiàn)在的單列數(shù)據(jù)中每行看似都是 dict 類型的,但用 for 循環(huán)遍歷時(shí),取出的數(shù)據(jù)則是 str 類型,所以要用 json 庫(kù)轉(zhuǎn)換成 dict。


        在用 pd.DataFrame 來(lái)構(gòu)造新的 DataFrame,需要注意,構(gòu)造時(shí),dict 中的 value 值必須是可迭代的類型,比如 list 等,不然會(huì)報(bào)錯(cuò):


        ?

        e3b3a5e88d1cf031127cd96ddc1ac2c5.webp


        由于現(xiàn)在 dict 中的 value 是單個(gè)字符串,所以需要加上 Index=[0] 的參數(shù),方可解決問(wèn)題。


        7d217e1333f1d3d17ce70032a97c24d6.webp


        這樣最終構(gòu)造出來(lái)的每個(gè)單獨(dú)的 DataFrame,我們將其追加到一個(gè)列表中,便于后續(xù)合并使用。


        4.?pd.concat([df1,df2....]) 合并DataFrame


        new_detail_df = pd.concat(detail_col_list, axis=0, ignore_index=True)


        參數(shù) axis=0?表示上下合并,1表示左右合并,ignore_index=True表示忽略原來(lái)的索引。


        b0c5e1dd977f45eae385053d29e93285.webp


        最終,你可以看到由 list 中多個(gè) df 上下合并而成大的 df,和 csv 中的順序一致,數(shù)據(jù)一致。


        PS :?關(guān)于這里的 for 循環(huán),如果你會(huì)列表表達(dá)式,可以寫成一行處理,很簡(jiǎn)潔:


        detail_col_list = [pd.DataFrame(json.loads(detail_str), index=[0]) for detail_str in attr_details_data_dict]




        上面四步驟是在處理原來(lái)英雄的初始化數(shù)值的參數(shù)。


        原 csv 中還有一列,也是 dict 類型,類似處理即可。


        當(dāng)然如果你對(duì) Excel 處理,以上的后三部也是適用的。


        4

        pandas寫入Excel


        寫入 Excel 之前,我們有一項(xiàng)工作沒(méi)有做,就是將我們新增的列合并到原有的 df 上去,把原來(lái) df 中的兩個(gè) dict 列去除掉。


        1. 去除 df 中的某列。df.drop(['列名'],axis=1)


        df2 = df.drop(['attr_details_data_dict', 'recommand_stars_dict'], axis=1)   # 刪除已經(jīng)處理過(guò)的列print(df2.columns)?#?打印列名


        a7eff79f259c31e34699dbd5b3be183a.webp


        2. 將新增列合并刪除后的列上。


        依然采用 concat 函數(shù)去做合并,這次是左右合并,所以 axis=1 ,列合并(左右), axis=0,行合并(上下)。


        # 合并新舊列final_df?=?pd.concat([df2,?new_detail_df,?new_recommend_df],?axis=1)


        結(jié)果:


        3f19346b16e6ce0e140ec33dfa9476e7.webp


        3.?寫入 Excel


        寫入操作很簡(jiǎn)單,只需要如下:


        final_df.to_excel('xxx.xlsx')


        5

        總結(jié)


        pandas的操作,已經(jīng)有了中文的官方文檔,非常友好,大家可以對(duì)照中文文檔去看下。


        關(guān)于 Excel 中的頭像下載,以及 Excel 的數(shù)據(jù)清理,放在下一篇文章中講解。本篇內(nèi)容長(zhǎng)度足矣了,不繼續(xù)寫了。


        老規(guī)矩,本章代碼已經(jīng)上傳到 github 上,后臺(tái)回復(fù)?王者數(shù)據(jù) ,即可獲得源碼和excel文件!




        ▼往期精彩回顧▼年終總結(jié) | 盤點(diǎn)2019展望2020
        pyspider爬取王者榮耀數(shù)據(jù)(上)
        pyspider爬取王者榮耀數(shù)據(jù)(下)


        d47ed374b2b5b0f7bb4038789347e5a7.webp你點(diǎn)的每個(gè)在看,我都認(rèn)真當(dāng)成了喜歡
        瀏覽 45
        點(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>
            亚洲AV秘 无码国产非洲 | 日韩淫色视频 | 黄片一级毛片 | 欧美女人的b | 日韩丰满少妇 | 激情网AV | 日大逼黄片儿 | 91成人短视频在线观看 | 欧美三级韩国三级日本三斤 | 无码国产精品一区二区免费式直播 |