利用python進行資料分析學習筆記-Pandas篇
阿新 • • 發佈:2019-01-24
無論如何,堅持啊!
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()#層次化索引被轉移到列裡面