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庫(kù)的數(shù)據(jù)讀取、數(shù)據(jù)獲取、數(shù)據(jù)拼接、數(shù)據(jù)寫(xiě)出!

        共 4908字,需瀏覽 10分鐘

         ·

        2022-08-02 04:34

        1. pandas介紹

        Pandas是一個(gè)強(qiáng)大的數(shù)據(jù)分析庫(kù),它的Series和DataFrame數(shù)據(jù)結(jié)構(gòu),使得處理起二維表格數(shù)據(jù)變得非常簡(jiǎn)單。基于后面需要對(duì)Excel表格數(shù)據(jù)進(jìn)行處理,有時(shí)候使用Pandas庫(kù)處理表格數(shù)據(jù),會(huì)更容易、更簡(jiǎn)單,因此我這里必須要講述。Pandas庫(kù)是一個(gè)內(nèi)容極其豐富的庫(kù),這里并不會(huì)面面俱到。我這里主要講述的是如何利用Pandas庫(kù)完成 “表格讀取”、“表格取數(shù)”“表格合并” 的任務(wù)。其實(shí)Pandas能實(shí)現(xiàn)的功能,遠(yuǎn)遠(yuǎn)不止這些,關(guān)于利用該庫(kù)如何實(shí)現(xiàn)數(shù)據(jù)清晰和圖表制作,不是本書(shū)的研究范圍,大家可以下去好好學(xué)習(xí)這個(gè)庫(kù)。在使用這個(gè)庫(kù)之前,需要先導(dǎo)入這個(gè)庫(kù)。為了使用方便,習(xí)慣性給這個(gè)庫(kù)起一個(gè)別名pd,本書(shū)中只要是見(jiàn)到pd,指的都是Pandas。

        2. Excel數(shù)據(jù)的讀取

        Pandas支持讀取csv、excel、json、html、數(shù)據(jù)庫(kù)等各種形式的數(shù)據(jù),非常強(qiáng)大。但是我們這里僅以讀取excel文件為例,講述如何使用Pandas庫(kù)讀取本地的excel文件。在Pandas庫(kù)中,讀取excel文件使用的是pd.read_excel()函數(shù),這個(gè)函數(shù)強(qiáng)大的原因是由于有很多參數(shù)供我們使用,是我們讀取excel文件更方便。在這里我們僅僅講述sheet_name、header、usecols和names四個(gè)常用參數(shù)。

        ① sheet_name參數(shù)詳解

        我們知道一個(gè)excel文件是一個(gè)工作簿,一個(gè)工作簿有多個(gè)sheet表,每個(gè)sheet表中是一個(gè)表格數(shù)據(jù)。sheet_name參數(shù)就是幫助我們選擇要讀取的sheet表,具體用法如下。sheet_name=正整數(shù)值,等于0表示讀取第一個(gè)sheet表,等于1表示讀取第二個(gè)sheet表,以此類(lèi)推下去。sheet_name=”sheet名稱(chēng)”,我們可以利用每張sheet表的名稱(chēng),讀取到不同的sheet表,更方便靈活。注意:如果不指定該參數(shù),那么默認(rèn)讀取的是第一個(gè)sheet表。用法1:sheet_name=正整數(shù)值
        df?=?pd.read_excel("readexcel.xlsx",sheet_name=1)
        df
        結(jié)果如下:206e46e1101d2960a33672b569d6653b.webp用法2:sheet_name=”sheet名稱(chēng)”
        df?=?pd.read_excel("readexcel.xlsx",sheet_name="考試成績(jī)表")
        df
        結(jié)果如下:de5734d30fda790ad896adc5fc8fcb47.webp

        ② header參數(shù)詳解

        有時(shí)候待讀取的excel文件,可能有標(biāo)題行,也有可能沒(méi)有標(biāo)題行。但是默認(rèn)都會(huì)將第一行讀取為標(biāo)題行,這個(gè)對(duì)于沒(méi)有標(biāo)題行的excel文件來(lái)說(shuō),顯得不太合適了,因此header參數(shù)可以很好的解決這個(gè)問(wèn)題。header=None,主要針對(duì)沒(méi)有標(biāo)題行的excel文件,系統(tǒng)不會(huì)將第一行數(shù)據(jù)作為標(biāo)題,而是默認(rèn)取一個(gè)1,2,3…這樣的標(biāo)題。header=正整數(shù)值,指定哪一行作為標(biāo)題行。用法1:header=None
        df?=?pd.read_excel("readexcel.xlsx",sheet_name="copy",header=None)
        df
        結(jié)果如下:ef7126945c0d16b42b6b9a2e8ee52f0b.webp用法2:header=正整數(shù)值
        df?=?pd.read_excel("readexcel.xlsx",sheet_name="基本信息表",header=1)
        df
        結(jié)果如下:6c89e7bf0ed2f3f1f62be550a71fc5fe.webp

        ③ ?usecols參數(shù)詳解

        當(dāng)一張表有很多列的時(shí)候,如果你僅僅想讀取 這張表中的指定列,使用usecols參數(shù)是一個(gè)很好的選擇。關(guān)于usecols參數(shù),這里有多種用法,我們分別進(jìn)行說(shuō)明。usecols=None,表示選擇一張表中的所有列,默認(rèn)情況不指定該參數(shù),也表示選擇表中的所有列。usecols=[A,C],表示選擇A列(第一列)和C列(第三列)。而usecols=[A,C:E],表示選擇A列,C列、D列和E列。usecols=[0,2],表示選擇第一列和第三列。
        #?下面這兩行代碼,均表示獲取前2列的數(shù)據(jù)
        df?=?pd.read_excel("readexcel.xlsx",sheet_name="考試成績(jī)表",usecols=[1,2])
        df?=?pd.read_excel("readexcel.xlsx",sheet_name="考試成績(jī)表",usecols="A:B")
        df
        結(jié)果如下:3c56567240de38f5d08d940d7ce9c349.webp

        ④ names參數(shù)詳解

        如果一張表沒(méi)有標(biāo)題行,我們就需要為其指定一個(gè)標(biāo)題,使用names參數(shù),可以在讀取數(shù)據(jù)的時(shí)候,為該表指定一個(gè)標(biāo)題。names=[“列名1”,”列名2”…]:傳入一個(gè)列表,指明每一列的列名。
        name_list?=?["學(xué)號(hào)","姓名","性別","籍貫"]
        df?=?pd.read_excel("readexcel.xlsx",sheet_name="copy",header=None,names=name_list)
        df
        結(jié)果如下:20f82f280b5971db829d6d896fdc844f.webp

        3. Excel數(shù)據(jù)的獲取

        知道怎么讀取excel文件中的數(shù)據(jù)后,接下來(lái)我們就要學(xué)著如何靈活獲取到excel表中任意位置的數(shù)據(jù)了。這里我一共提供了5種需要掌握的數(shù)據(jù)獲取方式,分別是 “訪問(wèn)一列或多列” ,“訪問(wèn)一行或多行”“訪問(wèn)單元格中某個(gè)值” ,“訪問(wèn)多行多列” 。

        ① 什么是“位置索引”和標(biāo)簽索引

        6829f17b6df85e5c3dc8e7d1e6ba9d80.webp在講述如何取數(shù)之前,我們首先需要理解“位置索引”和“標(biāo)簽索引”這兩個(gè)概念。每個(gè)表的行索引就是一個(gè)“標(biāo)簽索引”,而標(biāo)識(shí)每一行位置的數(shù)字就是 “位置索引”,如圖所示。在pandas中,標(biāo)簽索引使用的是loc方法,位置索引用的是iloc方法。接下來(lái)就基于圖中這張表,來(lái)帶著大家來(lái)學(xué)習(xí)如何 “取數(shù)”。首先,我們需要先讀取這張表中的數(shù)據(jù)。
        df?=?pd.read_excel("readexcel.xlsx",sheet_name="地區(qū)")
        df
        結(jié)果如下:cea5deb27eccbcde13cf520b206e4248.webp

        ② 訪問(wèn)一列或多列

        “訪問(wèn)一列或多列”,相對(duì)來(lái)說(shuō)比較容易,直接采用中括號(hào)“標(biāo)簽數(shù)組”的方式,就可以獲取到一列或多列。方法1:訪問(wèn)一列
        df["武漢"]
        方法2:訪問(wèn)多列
        df[["武漢","廣水"]]

        ③ 訪問(wèn)一行或多行

        “訪問(wèn)一行或多行”,方法就比較多了,因此特別容易出錯(cuò),因此需要特別注意。方法1:訪問(wèn)一行
        #?位置索引
        df.iloc[0]
        #?標(biāo)簽索引
        df.loc["地區(qū)1"]
        方法2:訪問(wèn)多行
        #?位置索引
        df.iloc[[0,1,3]]
        #?標(biāo)簽索引
        df.loc[["地區(qū)1","地區(qū)2","地區(qū)4"]]

        ④ 訪問(wèn)單元格中某個(gè)值

        “訪問(wèn)單元格中某個(gè)值”,也有很多種方式,既可以使用“位置索引”,也可以使用“標(biāo)簽索引”。
        #?使用位置索引
        df.iloc[2,1]
        #?使用標(biāo)簽索引
        df.loc["地區(qū)3","天門(mén)"]

        ⑤ 訪問(wèn)多行多列

        “訪問(wèn)多行多列”,方法就更多了。我一共為大家總結(jié)了5種方法。第一,iloc+切片;第二種,loc+標(biāo)簽數(shù)組;第三種,iloc+切片+位置數(shù)組;第四種,loc+切片+標(biāo)簽數(shù)組。方法1:iloc+切片
        #?選取前3行數(shù)據(jù)的所有列
        df.iloc[:3,:]
        方法2:loc+標(biāo)簽數(shù)組
        #?選取地區(qū)1和地區(qū)3這兩行的武漢、孝感、廣水列
        df.loc[["地區(qū)1","地區(qū)3"],['武漢','孝感','廣水']]
        方法3:iloc+切片+位置數(shù)組
        #?選取所有行的第2和第5列數(shù)據(jù)
        df.iloc[:,[1,4]]
        方法4:loc+切片+標(biāo)簽數(shù)組
        #?選取地區(qū)1和地區(qū)2這兩行的武漢和廣水列
        df.loc[:"地區(qū)2":,["武漢","廣水"]]

        4. Excel數(shù)據(jù)的拼接

        在進(jìn)行多張表合并的時(shí)候,我們需要將多張表的數(shù)據(jù),進(jìn)行縱向(上下)拼接。在pandas中,直接使用pd.concat()函數(shù),就可以完成表的縱向合并。關(guān)于pd.concat()函數(shù),用法其實(shí)很簡(jiǎn)單,里面有一個(gè)參數(shù)ignore_index需要我們注意,ignore_index=True,表示會(huì)忽略原始索引,生成一組新的索引。如果不使用ignore_index參數(shù)
        df1?=?pd.read_excel("concat.xlsx",sheet_name="Sheet1")
        df2?=?pd.read_excel("concat.xlsx",sheet_name="Sheet2")
        pd.concat([df1,df2],ignore_index=True)
        結(jié)果如下:d881e347dc59d28c2dc07f8b5eccf537.webp從上表可以看到,里面有兩條記錄是完全重復(fù)的,我們直接可以再調(diào)用drop_duplicates()函數(shù),實(shí)現(xiàn)去重操作。
        df1?=?pd.read_excel("concat.xlsx",sheet_name="Sheet1")
        df2?=?pd.read_excel("concat.xlsx",sheet_name="Sheet2")
        pd.concat([df1,df2],ignore_index=True).drop_duplicates()
        結(jié)果如下:406585e7b6143b72679a9963f327a268.webp

        5. Excel數(shù)據(jù)寫(xiě)出

        當(dāng)我們將某個(gè)Excel文件中的表,進(jìn)行讀取、數(shù)據(jù)整理等一系列操作后,就需要將處理好的數(shù)據(jù),導(dǎo)出到本地。其實(shí)Pandas庫(kù)中可以導(dǎo)出的數(shù)據(jù)格式有很多種,我們同樣以導(dǎo)出xlsx文件為例,進(jìn)行講述。在Pandas庫(kù)中,將數(shù)據(jù)導(dǎo)出為xlsx格式,使用的是DataFrame對(duì)象的to_excle()方法,其中這里面有4個(gè)常用的參數(shù),詳情如下。
        • excel_writer:表示數(shù)據(jù)寫(xiě)到哪里去,可以是一個(gè)路徑,也可以是一個(gè)ExcelWriter對(duì)象。
        • sheet_name:設(shè)置導(dǎo)出到本地的Excel文件的Sheet名稱(chēng)。
        • index:新導(dǎo)出到本地的文件,默認(rèn)是有一個(gè)從0開(kāi)始的索引列,設(shè)置index=False可以去掉這個(gè)索引列。
        • columns:選則指定列導(dǎo)出,默認(rèn)情況是導(dǎo)出所有列。
        • encoding:有時(shí)候?qū)С龅奈募?huì)出現(xiàn)亂碼的格式,這個(gè)時(shí)候就需要使用該參數(shù)設(shè)置文件編碼格式。
        df1?=?pd.read_excel("concat.xlsx",sheet_name="Sheet1")
        df2?=?pd.read_excel("concat.xlsx",sheet_name="Sheet2")
        df3?=?pd.concat([df1,df2],ignore_index=True)
        df3.to_excel(excel_writer="to_excel.xlsx",sheet_name="to_excel",index=None)

        6. ExcelWriter的使用

        有時(shí)候我們需要將多excel表寫(xiě)入同一個(gè)工作簿,這個(gè)時(shí)候就需要借助Pandas中的pd.ExcelWriter()對(duì)象,默認(rèn)對(duì)于xls使用xlwt引擎,對(duì)于xlsx使用openpyxl引擎。這里面有兩個(gè)參數(shù),一個(gè)是路徑參數(shù)Path,表示生成文件的存放路徑,一個(gè)是時(shí)間格式化參數(shù)datetime_format,可以將生成文件中的時(shí)間列,按照指定時(shí)間格式化輸出。
        df1?=?pd.read_excel("concat.xlsx",sheet_name="Sheet1")
        df2?=?pd.read_excel("concat.xlsx",sheet_name="Sheet2")
        with?pd.ExcelWriter("excel_writer.xlsx",datetime_format="YYYY-MM-DD")?as?writer:
        ????df1.to_excel(excel_writer=writer,sheet_name="df1",index=None)
        ????df2.to_excel(excel_writer=writer,sheet_name="df2",index=None)
        上面第三行代碼,我們打開(kāi)了一個(gè)ExcelWriter對(duì)象的同時(shí),將所有設(shè)計(jì)到時(shí)間列的數(shù)據(jù),進(jìn)行格式化輸出為年-月-日。接著第四行代碼,我們將df1中的數(shù)據(jù)寫(xiě)到這個(gè)ExcelWriter對(duì)象中,將這個(gè)Sheet取名為df1。最后第五行代碼,再將df2中的數(shù)據(jù)寫(xiě)入到這個(gè)ExcelWriter對(duì)象中,同樣將Sheet取名為df1。-?END -
        瀏覽 96
        點(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>
            www.caopeng | 91激情在线 | 欧美第九页 | 吊操逼 | 国产一级不卡在线 | 欧美亚洲 | 亚洲AV成人片在线 | 国产精品动漫一区二区三区 | 亚州成人片 | 影音先锋三级 |