1. 程式人生 > >利用python進行資料分析學習筆記-Pandas篇

利用python進行資料分析學習筆記-Pandas篇

無論如何,堅持啊!

pandas的資料結構

Series

obj = Series([]) #產生一個Series
obj = Series({})#可以通過引入一個dict來建立一個Series

包括values和index兩個屬性,而values和index都有一個name屬性
用NA表示缺失的資料,isnull,notnull用於判斷

Dataframe

data = Dataframe(np.arange(16).reshape(4,4))  #或者傳入一個由等長列表或Numpy陣列組成的dict
frame2 = Dataframe(data,columns=[],index=[])
frame2[]或者frame2.#通過字典標記或者屬性的方式,獲取Dataframe的列
frame.ix[]索引欄位

為不存在的列賦值會創建出新列,

del frame2[]   #del用以刪除列

以上索引返回的只是檢視而非副本,若要建立副本,用.copy

索引物件

index,不可修改

  • Index
  • int64Index
  • MultiIndex
  • DatetimeIndex
  • PeriodIndex
    每個索引都有一些方法和屬性,不在贅述

Series,Dataframe的基本功能

重新索引

reindex建立一個重新索引的新物件

若某個索引值當前不存在,就引入缺失值
可以通過method:ffill或bfill插值,fill_vale= 0等指定插入值

frame.reindex(index=[],method='ffill',columns=[])#索引可以同時按行和列改變,插值只能按行應用

reindex的函式

  • method
  • fill_value
  • limit #限定最大填充量
  • level 在MultiIndex的指定級別上匹配簡單索引,否則取其子集
  • copy

丟棄指定軸上的項

data.drop([],axis=1)         #axis=1表示刪除列,否則預設為axis=0刪除行,[]為index或column中元素

索引,選取和過濾

  • Series上索引,obj[…]
  • DataFrame上索引,data.ix[]
  • data.icol選取單列 data.irow選取單行
  • get_value,set_value 根據行列標籤選取單個值
    利用標籤的切片運算包括右邊界

算術運算和資料對齊

  • add
  • sub
  • div
  • mul
    運算時遵循取索引並集的原則,在不重疊的索引處引入NA,可以通過fill_value指定填充值
    DataFrame和Series的運算為廣播,預設將Series的索引匹配到DataFrame的列,沿行廣播,如果不完全對應,將形成並集
    使用0值表示沿著每一列或行標籤\索引值向下執行方法,使用1值表示沿著每一行或者列標籤模向執行對應的方法
    這裡寫圖片描述

函式應用和對映

Numpy中的ufunc可以用於pandas物件

np.abs(frame)

另一種操作

frame.apply(f,axis=1)

排序和排名

#對行或列索引進行命名,採用sort_index方法
frame.sort_index(axis=o/1,ascending=False#預設為升序)
frame.sort_index(by ['b','c'])
按值對Series排序,用order

排名rank()方法會增設一個排名值,為各組分配一個平均排名

  • average#為各個值平均分配排名
  • min #使用整個分組的最小排名
  • max
  • first 按在原始資料中出現的順序分配排名

帶有重複值的軸索引

某個索引對應多個值,則返回一個Series,對應單個值則返回一個標量值

彙總和計算描述統計

相關係數和協方差

corr計算兩個Series中重疊的,非NA的,按索引對齊的值的相關係數,cov用於計算協方差

唯一值,值計數以及成員資格

uniques = obj.unique()#返回一個唯一值陣列
obj.value_counts() #計算各個值出現的頻率
obj.isin[]

處理缺失資料

python內建的none也被作為NA處理

  • dropna
  • fillna
  • isnull
  • notnull

濾除缺失資料

對於Series,dropna返回一個僅含非空資料的Series,對於DataFrame,丟棄任何含有缺失值的行,傳入how=‘all’將只丟棄全為NA的行

data.dropna(how='all')
df.dropna(thresh=3)#一行中至少有三個NAN時保留

填充缺失資料

df.fillna(0)
df.fillna({1:0.5,3:-1})
df.fillna(method=)

fillna返回新物件,inplace=true時對現有物件進行就地修改

層次化索引

重排分級順序

df.swaplevel(,)
df.sortlevel(1)#按1排序

根據級別彙總統計

frame.sum(level='key2')
frame.sum(level='color')

使用Dataframe的列

df.set_index([],drop=)#預設這些列會被移除
df.reset_index()#層次化索引被轉移到列裡面