- 2016-6-7:第一次學習。
- 2016-8-24:第二次學習,添加思維導圖。


pandas 兩個主要數據結構:
Series 和
DataFrame。(建議引入本地)
- 類似於一維數組的對象,它由一組數據(各種NumPy數據類型)以及一組與之相關的數據標簽(即索引)組成
- 通過Series 的 values 和 index 屬性獲取其數組表示形式和索引對象
- 可以為數據指定索引,通過索引的方式選取Series中的單個或一組值
- NumPy數組運算(如根據布爾型數組進行過濾、標量乘法、應用數學函數等)都會保留索引和值之間的鏈接
- 可以將Series看成是一個定長的有序字典,因為它是索引值到數據值的一個映射
- 可以直接通過字典來創建Series
- Series的索引可以通過賦值的方式(列表)就地修改
- Series對象本身及其索引都有一個name屬性,可直接賦值修改
DataFrame:
- 表格型的數據結構,它含有一組有序的列,每列可以是不同的值類型(數值、字符串、布爾值等)。DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典(共用同一個索引)。
- 構建DataFrame,最常用的一種是直接傳入一個由等長列表或NumPy數組組成的字典。
- DataFrame會自動加上索引(跟Series一樣),且全部列會被有序排列。(如果指定了列序列,則DataFrame的列就會按照指定順序進行排列)
- 跟Series一樣,如果傳入的列在數據中找不到,就會產生NA值。
- 通過類似字典標記的方式或屬性的方式獲取列
- 賦值給列:將列表或數組賦值給某個列時,其長度必須跟DataFrame的長度相匹配。如果賦值的是一個Series,就會精確匹配DataFrame的索引,所有的空位都將被填上缺失值
- 為不存在的列賦值會創建出一個新列。
- 關鍵字del用於刪除列。
- 通過索引方式返回的列只是相應數據的視圖而已,並不是副本。(通過Series的copy方法即可顯式地復制列)
- 傳入嵌套字典:外層字典的鍵作為列,內層鍵則作為行索引
- 可以設置DataFrame的 index 和 columns 的 name 屬性

pandas的索引對象:
- 軸標簽和其他元數據(比如軸名稱等)
- Index對象是不可修改的,這樣才能使Index對象在多個數據結構之間安全共享
- 本質是一個由Python對象組成的Numpy數組

Series 和 DataFrame 中的數據的基本功能:
- 重新索引(reindex):
- 創建一個適應新索引的新對象,將會根據新索引進行重排。如果某個索引值當前不存在,就引入缺失值
- 對於時間序列這樣的有序數據,重新索引時可能需要做一些插值處理。method選項:ffill / pad可以實現前向值填充;bfill / backfill 實現后向填充
- 對於DataFrame,reindex可以修改(行)索引、列,或兩個都修改。(如果僅傳入一個序列,則會重新索引行;使用columns關鍵字即可重新索引列)
- 插值則只能按行應用(即軸0
- 利用ix的標簽索引功能,重新索引任務可以變得更簡潔
- 丟棄指定軸上的項(drop):
- drop方法返回的是一個在指定軸上刪除了指定值的新對象
- 對於DataFrame,可以刪除任意軸上的索引值(軸1需加上參數:axis=1)
- 索引、選取和過濾:
- Series索引(obj[...])可以是標簽或整數。
- 利用標簽的切片運算其末端是包含的。(整數則不包含末端)
- 對DataFrame進行索引其實就是獲取一個或多個列(用列標簽) data[['three', 'one']]
- DataFrame選取行要通過切片或者布爾型數組或者索引字段ix
-
- 算術運算和數據對齊:
- 在將對象相加時,如果存在不同的索引對,則結果的索引就是該索引對的並集。自動的數據對齊操作在不重疊的索引處引入了NA值。缺失值會在算術運算過程中傳播。
- 在算術方法中填充值:
- 在對不同索引的對象進行算術運算時,當一個對象中某個軸標簽在另一個對象中找不到時填充一個特殊值(比如0)
- add,加法;sub,減法;div,除法;mul,乘法
df1 = DataFrame(np.arange(12.).reshape((3, 4)), columns=list('abcd'))
df2 = DataFrame(np.arange(20.).reshape((4, 5)), columns=list('abcde'))
# 使用df1的add方法,傳入df2以及一個fill_value參數
df1.add(df2, fill_value=0)
# 重新索引時,也可以指定一個填充值
- DataFrame和Series之間的運算:
- 默認情況下,DataFrame和Series之間的算術運算會將Series的索引匹配到DataFrame的列,然后沿着行一直向下廣播。
- 如果某個索引值在DataFrame的列或Series的索引中找不到,則參與運算的兩個對象就會被重新索引以形成並集。
- 如果你希望匹配行且在列上廣播,則必須使用算術運算方法。(傳入的軸號就是希望匹配的軸)
series3 = frame['d']
frame.sub(series3, axis=0)
- 函數應用和映射:
- NumPy的ufuncs(元素級數組方法)可用於操作pandas對象(如np.abs)
- DataFrame的apply方法:將函數應用到由各列或行所形成的一維數組上
- 許多最為常見的數組統計功能都被實現成DataFrame的方法(如sum和mean),因此無需使用apply方法
- 除標量值外,傳遞給apply的函數還可以返回由多個值組成的Series
- applymap方法:對frame中各個值格式化字符串(Series有一個用於應用元素級函數的map方法)
- 排序和排名:
- sort_index方法:對行或列索引進行排序(按字典順序);對於DataFrame,可以根據任意一個軸上的索引進行排序(axis=1);數據默認是按升序排序的,但也可以降序排序(ascending=False)
- order方法:按值對Series進行排序;在排序時,任何缺失值默認都會被放到Series的末尾
- sort_values方法:對於DataFrame,將一個或多個列的名字(組成列表)傳遞給by選項,可以根據一個或多個列中的值進行排序
- rank方法:適用於Series和DataFrame;
- 帶有重復值的軸索引:
- is_unique屬性:查看索引的值是否是唯一
- 對於帶有重復值的索引,數據選取的行為將會有些不同。如果某個索引對應多個值,則返回一個Series;而對應單個值的,則返回一個標量值。
- 匯總和計算描述統計:
- 相關系數與協方差:
- Series的 corr 方法用於計算兩個Series中重疊的、非NA的、按索引對齊的值的相關系數。與此類似,cov用於計算協方差。
- DataFrame的corrwith方法,可以計算其列或行跟另一個Series或DataFrame之間的相關系數:
- 傳入一個Series將會返回一個相關系數值Series(針對各列進行計算)
- 傳入一個DataFrame則會計算按列名配對的相關系數
- 唯一值、值計數以及成員資格:
- 處理缺失數據:
- pandas使用浮點值NaN(Not a Number)表示浮點和非浮點數組中的缺失數據。
- Python內置的None值也會被當做NA處理
- 濾除缺失數據:
- 對於一個Series:
- dropna返回一個僅含非空數據和索引值的Series
- 通過布爾型索引
- 對於DataFrame:
- dropna默認丟棄任何含有缺失值的行
- 傳入how='all'將只丟棄全為NA的那些行
- 要用這種方式丟棄列,只需傳入axis=1即可
- thresh參數:留下一部分觀測數據,thresh為非NaN值的最少個數
- 填充缺失數據:
- fillna方法:
- 通過一個常數調用就會將缺失值替換為那個常數值
- 通過一個字典調用fillna,就可以實現對不同的列填充不同的值(鍵名對應列標簽)
- fillna默認會返回新對象,但也可以對現有對象進行就地修改:參數 inplace=True
- 對reindex有效的那些插值方法也可用於fillna(如method='ffill')
- 通過函數調用fillna可以實現很多功能,比如說,你可以傳入Series的平均值或中位數
- 層次化索引:
- 能在一個軸上擁有多個(兩個以上)索引級別。抽象點說,它使你能以低維度形式處理高維度數據。
- 選取數據子集:
data = Series(np.random.randn(10),
index=[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd'],
[1, 2, 3, 1, 2, 3, 1, 2, 2, 3]])
data['b']
data['b':'c']
data.ix[['b', 'd']]
# 在“內層”中進行選取,a,b,c,d各層下的'2'標簽
data[:, 2]
- 重排分級順序:
- swaplevel接受兩個級別編號或名稱,並返回一個互換了級別的新對象(但數據不會發生變化)
- sortlevel則根據單個級別中的值對數據進行排序(穩定的)。交換級別時,常常也會用到sortlevel,這樣最終結果就是有序的了。
- 在層次化索引的對象上,如果索引是按字典方式從外到內排序(即調用sortlevel(0)或sort_index()的結果),數據選取操作的性能要好很多。
- 根據級別匯總統計:
- 許多對DataFrame和Series的描述和匯總統計都有一個level選項,它用於指定在某條軸上求和的級別。
- 使用DataFrame的列:
- set_index:將DataFrame的一個或多個列轉化成行索引
- reset_index:層次化索引的級別會被轉移到列里面
- 整數索引:
- 如果你的軸索引含有索引器,那么根據整數進行數據選取的操作將總是面向標簽的。這也包括用ix進行切片
- 如果你需要可靠的、不考慮索引類型的、基於位置的索引,可以使用iloc方法
- 面板數據:
- 三維版的DataFrame
- Panel中的每一項(類似於DataFrame的列)都是一個DataFrame