开心六月综合激情婷婷|欧美精品成人动漫二区|国产中文字幕综合色|亚洲人在线成视频

    1. 
      
        <b id="zqfy3"><legend id="zqfy3"><fieldset id="zqfy3"></fieldset></legend></b>
          <ul id="zqfy3"></ul>
          <blockquote id="zqfy3"><strong id="zqfy3"><dfn id="zqfy3"></dfn></strong></blockquote>
          <blockquote id="zqfy3"><legend id="zqfy3"></legend></blockquote>
          打開APP
          userphoto
          未登錄

          開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

          開通VIP
          數(shù)據(jù)科學(xué) | Pandas數(shù)據(jù)分析入門

          作者:佘亮

          數(shù)據(jù)處理是數(shù)據(jù)分析的核心部分,通過(guò)爬蟲或者實(shí)際生產(chǎn)過(guò)程中初步獲取的數(shù)據(jù)通常具有很多的“垃圾數(shù)據(jù)”,比如重復(fù)數(shù)據(jù)或者值缺失,不連續(xù)數(shù)據(jù)等等。這時(shí)就需要對(duì)數(shù)據(jù)首先進(jìn)行篩選,補(bǔ)全等“清洗”操作。

          數(shù)據(jù)處理是數(shù)據(jù)分析的核心部分,通過(guò)爬蟲或者實(shí)際生產(chǎn)過(guò)程中初步獲取的數(shù)據(jù)通常具有很多的“垃圾數(shù)據(jù)”,比如重復(fù)數(shù)據(jù)或者值缺失,不連續(xù)數(shù)據(jù)等等。這時(shí)就需要對(duì)數(shù)據(jù)首先進(jìn)行篩選,補(bǔ)全等“清洗”操作。除此之外,“清洗”好的數(shù)據(jù)也需要根據(jù)不同的用途來(lái)進(jìn)行轉(zhuǎn)換,以適應(yīng)分析,預(yù)測(cè)或者可視化的需求。

          數(shù)據(jù)的處理的軟件包有很多,在python中主要應(yīng)用Pandas來(lái)進(jìn)行處理。Pandas是一個(gè)十分成熟的數(shù)據(jù)處理包,熟練掌握可以高效并且方便地將數(shù)據(jù)進(jìn)行轉(zhuǎn)換和清洗,本節(jié)主要整理了pandas的一些基本技能和實(shí)用技巧,為勵(lì)志成為數(shù)據(jù)分析師的你鋪路搭橋。

          以下是本教程的總體提綱,這篇文章首先對(duì)pandas的基本操作進(jìn)行介紹,其他內(nèi)容敬請(qǐng)期待后續(xù)的文章。另附上我征稿通知的鏈接:數(shù)據(jù)科學(xué) | 『運(yùn)籌OR帷幄』數(shù)據(jù)分析、可視化、爬蟲系列教程征稿

          一 數(shù)據(jù)分析相關(guān)python包介紹

          • 常用數(shù)據(jù)分析庫(kù)NumPy, Pandas, SciPy, statssmodels, scikit-learn, NLTK的簡(jiǎn)介與安裝

          • 數(shù)據(jù)分析開發(fā)環(huán)境搭建

          二 數(shù)據(jù)的導(dǎo)入與導(dǎo)出

          • 讀取csv數(shù)據(jù)

          • 讀取mysql數(shù)據(jù)

          三 數(shù)據(jù)提取與篩選

          • 常見(jiàn)的數(shù)據(jù)格式與形態(tài)

          • Python對(duì)不同形式數(shù)據(jù)的讀寫

          四 數(shù)據(jù)清洗處理

          • 如何對(duì)數(shù)據(jù)進(jìn)行清洗

          • Pandas基本數(shù)據(jù)結(jié)構(gòu)與功能

          • Pandas統(tǒng)計(jì)相關(guān)功能

          • Pandas缺失數(shù)據(jù)處理

          • Pandas層次化索引

          • Pandas DataFrame

          五 高性能科學(xué)計(jì)算和數(shù)據(jù)分析的基礎(chǔ)包Numpy

          • NumPy的性能優(yōu)勢(shì)

          • 數(shù)組對(duì)象處理

          • 文件輸入輸出

          • 線性代數(shù)相關(guān)功能

          • 高效操作實(shí)踐

          六 統(tǒng)計(jì)分析

          • 線性回歸

          • 邏輯回歸

          • SVM

          • K緊鄰算法

          • 神經(jīng)網(wǎng)絡(luò)

          • 機(jī)器學(xué)習(xí)庫(kù)Scikit-Learn與應(yīng)用

          • 使用NLTK進(jìn)行Python文本分析

          • Python深度學(xué)習(xí)keras入門

          Pandas入門

          Pandas 是基于 NumPy 的一個(gè)開源 Python 庫(kù),它被廣泛用于數(shù)據(jù)分析,以及數(shù)據(jù)清洗和準(zhǔn)備等工作。數(shù)據(jù)科學(xué)家經(jīng)常和表格形式的數(shù)據(jù)(比如.csv、.tsv、.xlsx)打交道。Pandas可以使用類似SQL的方式非常方便地加載、處理、分析這些表格形式的數(shù)據(jù)。搭配Matplotlib和Seaborn效果更好。

          pandas可以滿足以下需求:

          • 具備按軸自動(dòng)或顯式數(shù)據(jù)對(duì)齊功能的數(shù)據(jù)結(jié)構(gòu)。這可以防止許多由于數(shù)據(jù)未對(duì)齊以及來(lái)自不同數(shù)據(jù)源(索引方式不同)的數(shù)據(jù)而導(dǎo)致的常見(jiàn)錯(cuò)誤、集成時(shí)間序列功能、既能處理時(shí)間序列數(shù)據(jù)也能處理非時(shí)間序列數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)、數(shù)學(xué)運(yùn)算和簡(jiǎn)約(比如對(duì)某個(gè)軸求和)可以根據(jù)不同的元數(shù)據(jù)(軸編號(hào))執(zhí)行、

          • 靈活處理缺失數(shù)據(jù)、

          • 在實(shí)際構(gòu)建任何模型之前,任何機(jī)器學(xué)習(xí)項(xiàng)目中的大量時(shí)間都必須花費(fèi)在準(zhǔn)備數(shù)據(jù)、

          • 分析基本趨勢(shì)和模式上。因此需要Pandas來(lái)進(jìn)行處理。

          下面我們開始今天的學(xué)習(xí)之旅。

          Pandas的安裝與導(dǎo)入

          首先,在使用Pandas前,必須安裝Pandas。如果你安裝過(guò)Anaconda,就可以執(zhí)行如下命令安裝Pandas:

          conda install pandas

          如果沒(méi)有安裝Anaconda,也沒(méi)有關(guān)系,可以使用Python的pip命令來(lái)安裝:

          pip install pandas

          注意:pandas安裝會(huì)用到numpy庫(kù),因此在安裝pandas之前一定要安裝好numpy。

          導(dǎo)入:為了簡(jiǎn)便,這里使用pd作為pandas的縮寫,因?yàn)閜andas依賴numpy,所以在使用之前需要安裝和導(dǎo)入numpy

          import numpy as np

          import pandas as pd

          打印pandas的版本

          pd.__version__

          考慮如下的Python字典數(shù)據(jù)和Python列表標(biāo)簽:

          data = {'animal': ['cat', 'cat', 'snake', 'dog', 'dog', 'cat', 'snake', 'cat', 'dog', 'dog'],

          'age': [2.5, 3, 0.5, np.nan, 5, 2, 4.5, np.nan, 7, 3],

          'visits': [1, 3, 2, 3, 2, 3, 1, 1, 2, 1],

          'priority': ['yes', 'yes', 'no', 'yes', 'no', 'no', 'no', 'yes', 'no', 'no']}

          labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

          Pandas數(shù)據(jù)結(jié)構(gòu)介紹

          Pandas有兩個(gè)數(shù)據(jù)結(jié)構(gòu):Series和DataFrame。

          • Series是一種類似于以為NumPy數(shù)組的對(duì)象,它由一組數(shù)據(jù)(各種NumPy數(shù)據(jù)類型)和與之相關(guān)的一組數(shù)據(jù)標(biāo)簽(即索引)組成的??梢杂胕ndex和values分別規(guī)定索引和值。如果不規(guī)定索引,會(huì)自動(dòng)創(chuàng)建 0 到 N-1 索引。

          • DataFrame是一種表格型結(jié)構(gòu),含有一組有序的列,每一列可以是不同的數(shù)據(jù)類型。既有行索引,又有列索引。

          pd.DataFrame:創(chuàng)建pandas矩陣

          pd.Series 創(chuàng)建pandas列表

          1.從具有索引標(biāo)簽的字典數(shù)據(jù)創(chuàng)建一個(gè)DataFrame df.

          df = pd.DataFrame(data,index = labels)

          返回DataFrame的前三行

          df.iloc[:3]

          df.head(3)

          運(yùn)行結(jié)果如下:

          2.從numpy 數(shù)組構(gòu)造DataFrame

          df2 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),columns=['a', 'b', 'c'])

          df2

          運(yùn)行結(jié)果如下

          3.通過(guò)其他DataFrame來(lái)創(chuàng)建DataFrame df3

          df3 = df2[['a','b','c']].copy()

          df3

          運(yùn)行結(jié)果如下:

          4.從csv文件中每隔n行來(lái)創(chuàng)建Dataframe

          df = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/BostonHousing.csv', chunksize=50)

          df2 = pd.DataFrame()

          5.用Series創(chuàng)建DataFrame

          s_1 = pd.Series(data['animal'])

          s_2 = pd.Series(data['age'])

          s_3 = pd.Series(data['visits'])

          s_4 = pd.Series(data['priority'])

          pd_2 = pd.DataFrame([s_1,s_2,s_3,s_4])

          pd_2

          運(yùn)行結(jié)果如下:

          Pandas處理NaN值

          dropna(axis=, how=):丟棄NaN數(shù)據(jù),{axis:0(按行丟棄),1(按列丟棄)} {how:'any'(只要含有NaN數(shù)據(jù)就丟棄),'all'(所有數(shù)據(jù)都為NaN時(shí)丟棄)}

          fillna(value=):將NaN值都設(shè)置為value的值

          isnull():對(duì)每各元素進(jìn)行判斷是否是NaN,返回結(jié)果矩陣

          np.any(matrix) == value:判斷matrix矩陣中是否有value值

          np.all(matrix) == value:判斷matrix矩陣中是否所有元素都是value值

          Pandas讀取數(shù)據(jù)、導(dǎo)出數(shù)據(jù)

          根據(jù)數(shù)據(jù)的格式,pandas提供了多種數(shù)據(jù)讀取和導(dǎo)出的方法,如:

          讀取數(shù)據(jù):read_csv、read_table、read_fwf、read_clipboard、read_excel、read_hdf

          導(dǎo)出數(shù)據(jù):to_csv、to_table、to_fwf、to_clipboard、to_excel、to_hdf

          df = pd.read_csv('Q1.csv')

          print(df)

          df.to_csv('Q1_pandas.csv')

          Pandas合并數(shù)據(jù)

          concat方法是拼接函數(shù),有行拼接和列拼接,默認(rèn)是行拼接,拼接方法默認(rèn)是外拼接(并集),拼接對(duì)象是pandas數(shù)據(jù)類型。

          第一個(gè)參數(shù):需要合并的矩陣

          axis:合并維度,0:按行合并,1:按列合并

          join:處理非公有 列/行 的方式,inner:去除非公有的 列/行,outer:對(duì)非公有的 列/行 進(jìn)行NaN值填充然后合并

          ignore_index:是否重排行索引

          df1 = pd.DataFrame(np.arange(12).reshape(3, 4), columns=['A', 'B', 'C', 'D'], index=[0, 1, 2])

          df2 = pd.DataFrame(np.ones((3, 4)), columns=['B', 'C', 'D', 'E'], index=[1, 2, 3])

          print(pd.concat([df1, df2], join='outer', ignore_index=True)) # join = {'outer', 'inner'}

          print(pd.concat([df1, df2], axis=1, join_axes=[df1.index]))

          print(df1.append([df2], ignore_index=True))

          append方法在index方向連接兩個(gè)DataFrame或者對(duì)DataFrame進(jìn)行擴(kuò)展

          append 方法可以直接用list對(duì)DataFrame進(jìn)行擴(kuò)展。

          df = pd.DataFrame([[1, 2], [3, 4]])

          df = df.append([[1,2]])

          print(df)

          運(yùn)行結(jié)果:

          或者也可以將兩個(gè)DataFrame連接起來(lái)。

          df = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'))

          df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB'))

          df = df.append(df2)

          print(df)

          運(yùn)行結(jié)果:

          需要注意的是,append方法并不能像list的append方法一樣對(duì)原來(lái)的df繼續(xù)修改,而是建立了一個(gè)新的對(duì)象。如果要修改df,那么需要重新對(duì)df賦值,所以append的方法執(zhí)行效率并不是很高。

          Join方法 是基于Index連接DataFrame,連接方法有內(nèi)連接、外連接(左連接和右連接)

          caller = pd.DataFrame({'key':['A0','A1','A2','A3','A4','A5'],'B':['B0','B1','B2','B3','B4','B5']})

          other = pd.DataFrame({'key':['A0','A1','A2'],'C':['C0','C1','C2']})

          caller.join(other,lsuffix='_caller',rsuffix='_other',how='inner')

          運(yùn)行結(jié)果如下:

          另外,還有一種merge方法與Join方法類似,不過(guò)語(yǔ)法略有不同。

          通過(guò)on連接兩個(gè)數(shù)據(jù)集的相同列,how表示連接的方式也有內(nèi)連接、外連接(左連接和右連接)

          使用merge方式要求合并的兩個(gè)DataFrame需要有兩數(shù)據(jù)集有一個(gè)相同列(不要求數(shù)值完全相同),繼續(xù)以上面數(shù)據(jù)為例,對(duì)比下區(qū)別

          df = pd.merge(caller,other,on = ['key'],how = 'inner')

          運(yùn)行結(jié)果如下:

          本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
          打開APP,閱讀全文并永久保存 查看更多類似文章
          猜你喜歡
          類似文章
          加速數(shù)據(jù)分析,這12種高效Numpy和Pandas函數(shù)為你保駕護(hù)航
          用過(guò)都說(shuō)好!12個(gè)Pandas和NumPy函數(shù),讓你處理數(shù)據(jù)更輕松
          利用程序監(jiān)聽(tīng)股票的數(shù)據(jù)分析
          關(guān)于數(shù)據(jù)分析中NumPy,Pandas,看完這一篇基本夠了
          推薦收藏!3.5萬(wàn)字圖解 Pandas!
          pandas DataFrame數(shù)據(jù)重命名列名的幾種方式
          更多類似文章 >>
          生活服務(wù)
          分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
          綁定賬號(hào)成功
          后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
          如果VIP功能使用有故障,
          可點(diǎn)擊這里聯(lián)系客服!

          聯(lián)系客服