日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

【Python】Pandas基础:结构化数据处理

發(fā)布時(shí)間:2025/3/21 python 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python】Pandas基础:结构化数据处理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
python:Pandas基礎(chǔ):結(jié)構(gòu)化數(shù)據(jù)處理

目錄:

文章目錄

    • @[toc]
      • 一 pandas及其重要性
      • 二 pandas的數(shù)據(jù)結(jié)構(gòu)介紹
        • 1 Series
        • 2 DataFrame
        • 3 索引對(duì)象
      • 三 基本功能
        • 1 重新索引
        • 2 丟棄指定軸上的項(xiàng)
        • 3 索引、選取、過(guò)濾
        • 4 算術(shù)運(yùn)算和數(shù)據(jù)對(duì)齊
          • 1)在算術(shù)方法中填充值
          • 2)DataFrame和Series之間的運(yùn)算
        • 5 函數(shù)應(yīng)用和映射
        • 6 排序和排名
          • 1)排序
          • 2)排名
        • 7 帶有重復(fù)值的軸索引
      • 四 匯總和計(jì)算描述統(tǒng)計(jì)
        • 1 相關(guān)系數(shù)與協(xié)方差
        • 2 唯一值、值計(jì)數(shù)、成員資格
          • 1)唯一值
          • 2)值計(jì)數(shù)
          • 3)成員資格
      • 五 處理缺失數(shù)據(jù)
        • 1 濾除缺失數(shù)據(jù)
        • 2 填充缺失數(shù)據(jù)
      • 六 層次化索引
        • 1 重排分級(jí)順序
        • 2 根據(jù)級(jí)別匯總統(tǒng)計(jì)
        • 3 使用DataFrame的列
      • 七 其他有關(guān)pandas的話題
        • 1 整數(shù)索引
        • 2 面板數(shù)據(jù)
      • 八 END

一 pandas及其重要性

  • pandas是數(shù)據(jù)分析工作的首選庫(kù)。它含有使數(shù)據(jù)分析工作變得更快更簡(jiǎn)單的高級(jí)數(shù)據(jù)結(jié)構(gòu)和操作工具。
  • pandas是基于Numpy構(gòu)建的讓以Numpy為中心的應(yīng)用變得更加簡(jiǎn)單。
  • 它能滿足工作中的許多需求:
    ① 具備按軸自動(dòng)或顯式數(shù)據(jù)對(duì)齊功能的數(shù)據(jù)結(jié)構(gòu)。防止由于數(shù)據(jù)未對(duì)齊導(dǎo)致的常見錯(cuò)誤。
    ② 集成時(shí)間序列功能。
    ③ 技既能處理時(shí)間序列也能處理非時(shí)間序列數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。
    ④ 數(shù)學(xué)運(yùn)算和簡(jiǎn)約(agg),可以根據(jù)不同的元數(shù)據(jù)(軸編號(hào))處理。
    ⑤ 靈活處理缺失數(shù)據(jù)。
    ⑥ 合并及其他出現(xiàn)在常見數(shù)據(jù)庫(kù)中的關(guān)系型運(yùn)算。
  • pandas可以解決的數(shù)據(jù)問(wèn)題隨著它的庫(kù)規(guī)模的增大而變得更加強(qiáng)大,成為數(shù)據(jù)分析一個(gè)不可或缺的工具。

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

1 Series

  • Series是一種類似于一維數(shù)組的對(duì)象,它由一組數(shù)據(jù)(各種Numpy數(shù)據(jù)類型)以及一組與之相關(guān)的數(shù)據(jù)標(biāo)簽(即索引)組成。由一組數(shù)據(jù)即可產(chǎn)生最簡(jiǎn)單的Series。
  • Series的字符串表現(xiàn)形式為:索引在左邊,值在右邊。自動(dòng)創(chuàng)建一個(gè)0~N-1的整數(shù)型索引,可以通過(guò)values和index屬性獲取其數(shù)組表示形式和索引對(duì)象。
obj = Series([4,7,-5,3]) obj.index obj.values
  • 可以通過(guò)索引的方式選取Series的單個(gè)或者一組值。
obj['one'] = 1
  • 數(shù)組運(yùn)算(如根據(jù)布爾型數(shù)組進(jìn)行過(guò)濾、標(biāo)量乘法、應(yīng)用數(shù)學(xué)函數(shù)等)會(huì)保留索引與值之間的鏈接。
obj[obj > 0] obj * 2 np.exp(obj)
  • 可以將Series看作一個(gè)定長(zhǎng)的有序字典,索引到值之間是一個(gè)映射。
'a' in obj
  • 如果數(shù)據(jù)被存放在一個(gè)python字典中,也可以直接通過(guò)這個(gè)字典創(chuàng)建Series。
data = {'one':1,'two':2,'three':3} obj = Series(data)
  • 如果只傳入一個(gè)字典,則結(jié)果Series的索引就是原字典的鍵(有序排列)。
  • Series最重要的一個(gè)功能是:它在算術(shù)運(yùn)算中會(huì)自動(dòng)對(duì)齊不同索引的數(shù)據(jù)。
  • Series對(duì)象本身及其索引都有一個(gè)name屬性,該屬性跟pandas其他的關(guān)鍵功能關(guān)系非常密切:
obj.name = ' population' obj.index.name = 'state' obj.index = ['one','two','three','four'] #通過(guò)賦值的方式修改索引

2 DataFrame

  • DataFrame是一個(gè)表格型的數(shù)據(jù)結(jié)構(gòu),含有一組有序的列,每列可以是不同的值類型(數(shù)值、字符串、布爾值等)。
  • DataFrame既有行索引也有列索引,可以被看做是Series組成的字典(共同用一個(gè)索引)。DataFrame面向行和列的操作基本上是平衡的。
  • DataFrame中的數(shù)據(jù)是以一個(gè)或多個(gè)二維塊存放的(而不是列表、字典或別的一維數(shù)據(jù)結(jié)構(gòu))。也可以輕松地將其表示為更高維度的數(shù)據(jù)(層次化索引的表格型結(jié)構(gòu),高級(jí)數(shù)據(jù)處理功能的關(guān)鍵要素)。
  • 構(gòu)建DataFrame的方法①:直接傳入一個(gè)由等長(zhǎng)列或Numpy數(shù)組組成的字典。
data = ({'':[],'':[]'':[]}) frame = DataFrame(data)
  • 結(jié)果DataFrame會(huì)自動(dòng)加上索引,且全部列會(huì)被有序排列。
  • 如果指定了列序列,則DataFrame的列會(huì)按照指定順序進(jìn)行排列。
DataFrame(data,columns = ['one','two','three']) frame = DataFrame(data,columns = [],index = []) frame.columns
  • 如果傳入的數(shù)據(jù)找不到,就會(huì)產(chǎn)生NA值
  • 通過(guò)類似字典標(biāo)記的方式或?qū)傩缘姆绞?#xff0c;可以將DataFrame的列獲取為一個(gè)Series
frame['one'] frame.one
  • 返回的Series擁有原DataFrame相同的索引,且其name屬性也已經(jīng)被相應(yīng)的設(shè)置好。
  • 行也可以通過(guò)位置或名稱的方式就行獲取,比如用索引字段ix。
frame.ix['1']
  • 列可以通過(guò)賦值的方式進(jìn)行修改。
  • 為不存在的列賦值會(huì)創(chuàng)建一個(gè)新列。
frame['new'] = 1 #新增一個(gè)空列,并賦一個(gè)標(biāo)量值frame['new'] = np.arange(5.) #新增一個(gè)空列,并賦一個(gè)標(biāo)量值
  • 將列表或數(shù)組賦值給某個(gè)列時(shí),其長(zhǎng)度必須跟DataFrame 長(zhǎng)度相匹配。如果是Series,會(huì)精確匹配DataFrame的索引,空位被缺失值填補(bǔ)。
Series = Series([1,2,3],index = ['one','two','three']) frame['new'] = Series
  • 構(gòu)建DataFrame的方法②:嵌套字典(字典的字典)
  • 如果將嵌套字典傳遞給DataFrame,它會(huì)被解釋為:外層字典的鍵作為列,內(nèi)層鍵則作為行索引。
  • 內(nèi)層字典的鍵會(huì)被合并、排序以形成最終 的索引。除非顯式指定了索引。
  • 可以輸入給DataFrame構(gòu)造函數(shù)所能接受的各種數(shù)據(jù)
    • 二維ndarray #數(shù)據(jù)矩陣,還可以傳入行標(biāo)和列標(biāo)。
    • 由數(shù)組、列表或元組組成的字典 #每個(gè)序列會(huì)變成DataFrame的一列,所有序列的長(zhǎng)度必須相同。
    • Numpy的結(jié)構(gòu)化/記錄數(shù)組 #類似于“由數(shù)組組成的字典”
    • 由Series組成的字典
    • 由字典組成的字典
    • 字典組成的Series列表
    • 列表或元組組成的另一個(gè)DataFrame
    • Numpy的MaskedAarry
  • 如果設(shè)置了DataFrame的index和columns屬性,這些信息會(huì)被現(xiàn)顯示出來(lái)。
  • 跟Series一樣,values屬性也會(huì)以二維ndarray的形式返回DataFrame中的數(shù)據(jù)。
  • 如果DataFrame各列的數(shù)據(jù)類型不同,則值數(shù)組的數(shù)據(jù)類型會(huì)選用能夠兼容所有列的數(shù)據(jù)類型。

3 索引對(duì)象

  • pandas的索引對(duì)象負(fù)責(zé)管理軸標(biāo)簽和其他元數(shù)據(jù)(比如軸名稱等)。構(gòu)建Series或DataFrame時(shí),所用到的任何數(shù)組或其他序列的標(biāo)簽會(huì)被轉(zhuǎn)換成一個(gè)index
  • index對(duì)象不可修改。不可修改性非常重要,這樣才能使index對(duì)象在多個(gè)數(shù)據(jù)結(jié)構(gòu)之間安全共享。
  • index的功能也類似于一個(gè)固定大小的集合。
  • 每個(gè)索引都有一些方法和屬性,可用于設(shè)置邏輯并回答有關(guān)該索引所包含的數(shù)據(jù)信息的問(wèn)題。
  • index的方法和屬性:
    • append # 連接另一個(gè)index對(duì)象,產(chǎn)生一個(gè)新的index
    • diff # 計(jì)算差集,并得到一個(gè)index
    • intersection # 計(jì)算交集
    • union # 計(jì)算并集
    • isin # 計(jì)算一個(gè)指示各值是否都包含在參數(shù)集合中的布爾型數(shù)組
    • delete # 刪除索引i處的元素,并得到一個(gè)新的index
    • drop # 刪除傳入的值,并得到新的index
    • insert # 將元素插入到索引i處,并得到新的index
    • is_monotonic # 當(dāng)各元素均大于等于前一個(gè)元素時(shí),返回True
    • is_unique # 當(dāng)index沒有重復(fù)值時(shí),返回True
    • unique # 計(jì)算index中唯一值得數(shù)組

三 基本功能

1 重新索引

  • pandas對(duì)象的一個(gè)重要方法是reindex,作用是創(chuàng)建一個(gè)適應(yīng)新索引的新對(duì)象。根據(jù)新索引進(jìn)行重排。
obj = Seires([],index = []) obj = obj.reindex(['','','']) obj = obj.reindex([],fillna = 0)
  • reindex的mathod選項(xiàng):
    • ffill或pad # 前向填充值
    • bfill或backfill # 后向填充值
  • 對(duì)于DataFrame,reindex可以修改(行)索引、列,或兩個(gè)都修改。
frame = frame.reindex(['','','','']) frame.reindex(columns = '') frame.reindex(index = ['','','','',],method = 'ffill',columns = '')
  • 利用ix的標(biāo)簽索引功能,重新簡(jiǎn)潔索引任務(wù)。
frame.ix[['','','',''],'']
  • reindex函數(shù)的參數(shù)
    • index # 用作索引的新序列,既可以是index實(shí)例,也可以是其他數(shù)據(jù)結(jié)構(gòu)。index會(huì)被完全使用,就像沒有任何復(fù)制。
    • method # 插值(填充)方式
    • fill_value # 在重新索引的過(guò)程中,需要引用缺失值時(shí)使用的替代值。
    • limit # 前向或后向填充時(shí)的最大填充量
    • level # 在MultiIndex的指定級(jí)別上匹配簡(jiǎn)單索引,否則選取其子集。
    • copy # 默認(rèn)為True,無(wú)論如何復(fù)制,如果為False,則新舊相等就不復(fù)制。

2 丟棄指定軸上的項(xiàng)

  • 丟棄某條軸上的一個(gè)或多個(gè)項(xiàng)很簡(jiǎn)單,只要有一個(gè)索引數(shù)組或列表即可。由于需要執(zhí)行一些數(shù)據(jù)整理和集合邏輯,所以drop方法返回的是一個(gè)在指定軸上刪除了指定值的新對(duì)象。
obj = Series(np.arange(5.),index = ['a','b','c','d','e','f']) new_obj = obj.drop('c')
  • 對(duì)于DataFrame,可以刪除任意軸上的索引值。
data.drop('one',axis = 0) data.drop(['one','two'],axis = 1)

3 索引、選取、過(guò)濾

  • Series索引的工作方式類似于Numpy數(shù)組的索引,只不過(guò)Series的索引值不只是整數(shù)。
obj = Series(np.arange(5.),index = ['a','b','c','d','e','f']) obj['b':'c'] obj['b':'c'] = 5
  • 對(duì)DataFrame的索引其實(shí)就是獲取一個(gè)或多個(gè)列。
data['one'] data[['one','two']] data[:2] #行切片索引選取 data[data['three'] > 5] #布爾型數(shù)組選取行 data < 5 data[data < 5] = 0
  • 為了在DataFrame的行上進(jìn)行標(biāo)簽索引,引入專門的索引字段ix,可以通過(guò)Numpy式的標(biāo)記法以及軸標(biāo)簽從DataFrame中選取行和列的子集,是一種重新索引的簡(jiǎn)單手段。
data.ix['',['','']] #先行后列 data.ix[['',''],[1,0,3]] #先行后列 data.ix[[data.three > 5],[:2]]
  • 對(duì)pandas對(duì)象中的數(shù)據(jù)的選取和重排方式有很多。在使用層次化索引時(shí)還能用到一些別的方法。
  • DataFrame的索引選項(xiàng)
    • obj.ix[:,val] # 選取單個(gè)列或列子集
    • obj.ix[val1,val2] # 同時(shí)選取行和列
    • reindex方法 # 將一個(gè)或多個(gè)軸匹配到新索引
    • xs方法 # 根據(jù)標(biāo)簽選取單行或單列,并返回一個(gè)Series
    • icol、irow方法 # 根據(jù)整數(shù)位置選取單列或當(dāng)行,并返回一個(gè)Seires
    • get_value、set_value方法 # 根據(jù)行標(biāo)簽和列標(biāo)簽選取單個(gè)值。get_value是選取,set_value是設(shè)置。

4 算術(shù)運(yùn)算和數(shù)據(jù)對(duì)齊

  • pandas最重要的一個(gè)功能是,它可以對(duì)不同索引對(duì)象進(jìn)行算術(shù)運(yùn)算。在將對(duì)象相加時(shí),如果存在不同的索引對(duì),則結(jié)果的索引就是該索引對(duì)的并集。
  • 自動(dòng)的數(shù)據(jù)對(duì)齊操作在不重疊的索引處引入NA值,缺失值會(huì)在算術(shù)運(yùn)算中廣播。
  • 對(duì)于DataFrame,自動(dòng)對(duì)齊會(huì)同時(shí)發(fā)生在行和列上。
1)在算術(shù)方法中填充值
  • 在對(duì)不同索引的對(duì)象進(jìn)行算術(shù)運(yùn)算時(shí),可能希望在一個(gè)對(duì)象中某個(gè)軸鏢旗南在另一個(gè)對(duì)象中找不到時(shí)填充一個(gè)特殊值(比如0)。
df1 + df2 df1.add(df2,fill_value = 0) df1.reindex(columns = df2.columns,fill_value = 0)
  • 靈活的算術(shù)方法
    • add # +
    • sub # -
    • div # /
    • mul # *
2)DataFrame和Series之間的運(yùn)算
  • 默認(rèn)情況下,DataFrame和Series之間的算術(shù)運(yùn)算會(huì)將Series的索引匹配到DataFrame的列,然后沿著行一直向下廣播。

5 函數(shù)應(yīng)用和映射

  • Numpy的ufuncs(元素級(jí)數(shù)組方法)也可用于操作pandas對(duì)象。
  • 將函數(shù)應(yīng)用到由各列或行所形成的一維數(shù)組上。DataFrame的apply方法可以實(shí)現(xiàn)此功能。
f = lambda x : x.max() - x.min() frame.apply(f) frame.apply(f,axis = 1)
  • 元素級(jí)的Python函數(shù)也可以用。使用applymap函數(shù)可以得到frame中各個(gè)浮點(diǎn)值的格式化字符串。
format = lambda x : '%.2f' %x frame.applymap(format)
  • Series有一個(gè)應(yīng)用于元素級(jí)函數(shù)的map方法。
frame['e'].map(format)

6 排序和排名

1)排序
  • 按條件對(duì)數(shù)據(jù)集排序(sorting)是一種重要的內(nèi)置運(yùn)算。對(duì)行或列索引排序,可使用sort_index方法,返回一個(gè)已排序的新對(duì)象。
frame.sort_index() frame.sort_idnex(axis = 1) #根據(jù)任意軸上的索引就行排序 frame.sort_index(axis = 1,ascending = False) #數(shù)據(jù)默認(rèn)是按升序排序的,也可設(shè)置降序排序。
  • 對(duì)于Series,若按值進(jìn)行排序,可使用其order方法:obj.order()
  • 在排序時(shí),任何缺失值默認(rèn)都會(huì)被放到Series的末尾。
  • 對(duì)于DataFrame,通過(guò)將一個(gè)或多個(gè)列的名字傳遞給by選項(xiàng)可對(duì)一個(gè)或多個(gè)列進(jìn)行排序。
frame.sort_index(by = 'a') frame.sort_index(by = ['a','b'])
2)排名
  • 排名(ranking)跟排序關(guān)系密切,且它會(huì)增設(shè)一個(gè)排名值(從1開始,一直到數(shù)組中有效數(shù)據(jù)的數(shù)量)。與numpy.argsort間接排序索引差不多,只不過(guò)可以通過(guò)某種規(guī)則破壞平級(jí)關(guān)系。
  • rank方法通過(guò)“為各組分配一個(gè)平均排名”的方式破壞平級(jí)關(guān)系
    • obj.rank() # 直接排名
    • obj.rank(method = ‘first’) # 根據(jù)值在原數(shù)據(jù)中出現(xiàn)的順序給出排名
    • obj,rank(ascendiing = False, method = ‘max’) # 降序排名
  • 排名時(shí)用于破壞平級(jí)關(guān)系的method選項(xiàng):
    • ‘a(chǎn)verage’ # 在相等分組中,為各個(gè)值分配平均排名
    • min # 使用整個(gè)分組的最小排名
    • max # 使用整個(gè)分組的最小排名
    • first # 按值在原數(shù)據(jù)中的出現(xiàn)順序排名

7 帶有重復(fù)值的軸索引

  • 雖然pandas函數(shù)如(reindex)等都要求標(biāo)簽唯一,但這并不強(qiáng)制。
  • 索引的is_unique屬性可以顯示索引對(duì)應(yīng)的值是否唯一。
  • 對(duì)于重復(fù)值得索引,數(shù)據(jù)選擇返回的結(jié)果不同。如果索引對(duì)應(yīng)單個(gè)值,返回標(biāo)量值;如果索引對(duì)應(yīng)多個(gè)值,返回一個(gè)Series。

四 匯總和計(jì)算描述統(tǒng)計(jì)

  • pandas對(duì)象擁有一組常用的數(shù)學(xué)和統(tǒng)計(jì)方法。大部分都屬于約簡(jiǎn)和匯總統(tǒng)計(jì),用于從Series中提取單個(gè)值(sum or mean)或從DataFrame的行或列中提取一個(gè)Series。與對(duì)應(yīng)的Numpy數(shù)組方法相比,它們都是基于沒有缺失數(shù)據(jù)的假設(shè)構(gòu)建的。
  • 約簡(jiǎn)方法的選項(xiàng):
    • ① axis # 約簡(jiǎn)的軸,DataFrame的行用0,列用1
    • ② skipna # 排除缺失值,默認(rèn)值為True
    • ③ level # 如果軸是層次化索引的(MultiIndex),則更具level分組簡(jiǎn)約
  • 描述和匯總統(tǒng)計(jì)
    • count # 非NA值得數(shù)量
    • describe # 匯總統(tǒng)計(jì)描述
    • min、max # 最小值和最大值
    • argmin、argmax # 最小值和最大值的索引位置
    • idximin、idxmax # 最小值和最大值的索引值
    • quantile # 樣本分位數(shù)
    • sum # 總和
    • mean # 平均數(shù)
    • median # 算術(shù)中位數(shù)
    • mad # 根據(jù)平均值計(jì)算平均絕對(duì)誤差
    • var # 方差
    • std # 標(biāo)準(zhǔn)差
    • skew # 偏度(三階矩)
    • kurt # 峰度(四階距)
    • cumsum # 累計(jì)和
    • cummin、cummax # 累計(jì)最小值和累計(jì)最大值
    • cumprod # 累計(jì)積
    • diff # 一階分差(對(duì)時(shí)間序列很有用)
    • pct_change #百分比變化

1 相關(guān)系數(shù)與協(xié)方差

  • 有些匯總統(tǒng)計(jì)(如相關(guān)系數(shù)和協(xié)方差) 是通過(guò)參數(shù)計(jì)算出來(lái)的。
    • Series的corr方法用于計(jì)算兩個(gè)Series中重疊的、非NA的、按索引對(duì)齊的值得相關(guān)系數(shù)。cov用于計(jì)算協(xié)方差。
    • DataFrame的corr和cov方法將以DataFrame的形式返回完整的相關(guān)系數(shù)和協(xié)方差矩陣。
    • 利用DataFrame的corrwith方法,可以計(jì)算列或行與另一個(gè)Series或DataFrame之間的相關(guān)系數(shù)。

2 唯一值、值計(jì)數(shù)、成員資格

1)唯一值
uniques = obj.unique() uniques.sort() # 對(duì)結(jié)果進(jìn)行排序
2)值計(jì)數(shù)
  • Series是按值頻率降序排列的。
  • value_counts是一個(gè)頂級(jí)pandas方法 ,可用于任何數(shù)組或序列。
pd.value_counts(obj.values,sort = Flase) data = df.apply(pd.value_counts).fillna(0)
3)成員資格
  • isin,用于判斷矢量化集合的成員資格

五 處理缺失數(shù)據(jù)

  • 缺失數(shù)據(jù)(missing data)在大部分?jǐn)?shù)據(jù)分析中都很常見。pandas的設(shè)計(jì)目標(biāo)之一就是讓缺失數(shù)據(jù)的處理任務(wù)盡量輕松。
  • pandas對(duì)象上的所有描述統(tǒng)計(jì)都排除了缺失數(shù)據(jù)。
  • pandas使用浮點(diǎn)值(Not a Number)表示浮點(diǎn)和非浮點(diǎn)數(shù)組中的缺失數(shù)據(jù),只是一個(gè)便于被檢測(cè)出來(lái)的標(biāo)記。
  • python內(nèi)置的None也會(huì)表當(dāng)作NaN處理。
  • NA處理方法
    • dropna # 根據(jù)各標(biāo)簽的值是否存在缺失數(shù)據(jù)對(duì)軸標(biāo)簽進(jìn)行過(guò)濾,可通過(guò)閾值調(diào)節(jié)對(duì)缺失值的容忍度。
    • fillna # 用指定值或者插值(ffill或bfill)填充缺失數(shù)據(jù)。
    • isnull # 返回一個(gè)布爾型對(duì)象
    • notnull # isnull的否定形式

1 濾除缺失數(shù)據(jù)

  • 對(duì)于Series,dropna返回一個(gè)僅含非空數(shù)據(jù)和索引值的Series
data.dropna() data[data.notnull()]
  • DataFrame,稍微復(fù)雜一點(diǎn),dropna默認(rèn)丟棄任何含有缺失值的行,也可設(shè)置丟棄全NA或含有NA的行或列。
data.dropna(how = 'all') #傳入how = 'all'將只丟棄全為NA的那些行 data.dropna(axis = 1,how = 'all') #丟棄列
  • 另一個(gè)濾除DataFrame行的問(wèn)題設(shè)計(jì)時(shí)間序列處理。若只想留下一部分觀測(cè)數(shù)據(jù),可以用thresh參數(shù)。
df.dropna(thresh = 3)

2 填充缺失數(shù)據(jù)

  • fillna方法主要用于填補(bǔ)缺失數(shù)據(jù)。
    • 填充常數(shù)值
    • 通過(guò)一個(gè)字典數(shù)調(diào)用fillna,對(duì)不同的列填充不同的值。
  • fillna默認(rèn)返回新對(duì)象,但也可以對(duì)現(xiàn)有對(duì)象進(jìn)行就地修改。
data = df.fillna(0,inplace = True)
  • 對(duì)reindex有效的插值方法也可以用于fillna。
df.fillna(method = 'ffill') df.fillna(method = 'ffill',limit = 2)
  • fillna也可以傳入Series的平均數(shù)或中位數(shù)。
data.fillna(data.mean())
  • fillna函數(shù)參數(shù)說(shuō)明:
    • ① value # 用于填充缺失值的標(biāo)量值或字典對(duì)象
    • ② method # 插值方式。如果未函數(shù)調(diào)用時(shí)未指定其他參數(shù),默認(rèn)為’ffill’
    • ③ axis # 待填充的軸,默認(rèn)axis = 0
    • ④ inpalce # 修改調(diào)用者對(duì)象而不產(chǎn)生副本
    • ⑤ limit # (對(duì)于向前和向后填充)可以連續(xù)填充的最大數(shù)量

六 層次化索引

  • 層次化索引(hierarchical indexing)是pandas的一項(xiàng)重要功能,它使你能夠在軸上有用多個(gè)(兩個(gè)以上)索引級(jí)別。抽象點(diǎn)說(shuō),它使你能以低維度形式處理高維度數(shù)據(jù)。
data = Series(np.random.randn(10),index = [['a','a','a','b','b','b','b','c','c','c'],[1,2,3,1,2,3,1,2,3]])
  • 這就是帶有MultiIndex索引的Series的格式化輸出形式。索引之間的“間隔”表示“直接使用上面的標(biāo)簽”。
  • 對(duì)于一個(gè)層次化索引的對(duì)象,選取數(shù)據(jù)子集的操作很簡(jiǎn)單:
data['b'] #直接索引 data['b':'c'] # 切片索引 data[:,2] # 內(nèi)層中選取
  • 層次化索引在數(shù)據(jù)重塑和基于分組的操作(如透視表生成)中扮演著重要的角色。比如:unstack方法和其逆運(yùn)算stack方法:
data.unstack() data.unstack().stack()
  • 對(duì)于一個(gè)DataFrame,每條軸都可以有分層索引,每層都可以有名字(可以是字符串,也可以是其他Python對(duì)象),如果指定了名稱,它們就會(huì)顯示在控制臺(tái)輸出中。(不要將索引名稱跟軸標(biāo)簽混為一談)
frame.index.name = ['key1','key2'] frame.columns.names = ['state,'color']
  • 由于有了分部索引,因此可以輕松選取列分組。

1 重排分級(jí)順序

  • 有時(shí),需要重新調(diào)整某條軸上各級(jí)別的順序,或根據(jù)指定級(jí)別上的值對(duì)數(shù)據(jù)進(jìn)行排序。swaplevel接受兩個(gè)級(jí)別編號(hào)或名稱,并返回一個(gè)互換了級(jí)別的新對(duì)象(數(shù)據(jù)不會(huì)發(fā)生變化)。
frame.swaplevel('key1','key2')
  • sortlevel則根據(jù)單個(gè)級(jí)別中的值對(duì)數(shù)據(jù)進(jìn)行排序(穩(wěn)定的)。交換級(jí)別時(shí),常常也會(huì)用到sortlevel,這樣最終結(jié)果就有序了。
frame.sortlevel(1) frame.swaplevel(0,1).sortlevel(0)
  • 在層次化索引的對(duì)象上,如果索引是按字典方式從外到內(nèi)排序,即調(diào)用sortlevel(0)或sort_index()的結(jié)果,數(shù)據(jù)選取操作的性能會(huì)好很多。

2 根據(jù)級(jí)別匯總統(tǒng)計(jì)

  • 許多對(duì)DataFrame和Series的描述和匯總統(tǒng)計(jì)都有一個(gè)level選項(xiàng),它用于指定在某條軸上求和的級(jí)別。類似pandas的groupby功能。

3 使用DataFrame的列

  • 很多情況下,DataFrame的一個(gè)或多個(gè)列可以當(dāng)做索引來(lái)用,或者將索引轉(zhuǎn)變?yōu)镈ataFrame的列。
  • DataFrame 的set_index函數(shù)會(huì)將其一個(gè)或多個(gè)列轉(zhuǎn)換為行索引,并創(chuàng)建一個(gè)新的DataFrame。
  • 默認(rèn)情況下,這些被轉(zhuǎn)換為索引的列會(huì)被刪除,也可以調(diào)參保留。
frame2 = frame.set_index(['c','d']) frame.set_index(['c','d'],drop = Flase)
  • reset_index的功能與set_index剛好相反,層次化索引的級(jí)別會(huì)被轉(zhuǎn)移到列里面。
frame.reset_index()

七 其他有關(guān)pandas的話題

1 整數(shù)索引

  • 基于標(biāo)簽或位置的索引
  • 為了保持良好的一致性。如果軸索引含有索引器,那么根據(jù)整數(shù)進(jìn)行數(shù)據(jù)選取的操作將總是面向標(biāo)簽,也包括用ix進(jìn)行切片。
  • 如果需要可靠的、不考慮索引類型的、基于位置的索引,可以用Series的iget_value方法和DataFrame的irow和iloc方法。
serie.iget_value() frame.irow()

2 面板數(shù)據(jù)

pandas有一個(gè)panel數(shù)據(jù)結(jié)構(gòu),可以看做一個(gè)三維版的DataFrame,pandas大部分開發(fā)工作都集中在表格型數(shù)據(jù)的操作上,層次化索引頁(yè)使得多數(shù)情況下不需要用到N維數(shù)組。

stacked = pdata.ix[:].to_frame() # panel的數(shù)據(jù)呈現(xiàn)形式 stacked.to_panel()

八 END

總結(jié)

以上是生活随笔為你收集整理的【Python】Pandas基础:结构化数据处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。