量化投資與Python之pandas
pandas:數據分析
pandas是一個強大的Python數據分析的工具包。
pandas是基於NumPy構建的。
pandas的主要功能
具有對其功能的數據結構DataFrame、Series
集成時間序列功能
提供豐富的數學運算和操做
靈活處理缺失數據
安裝方法:pip install pandas
引用方法:import pandas as pd
pandas:Series
Series是一種相似於一位數組的對象,由一組數據和一組與之相關的數據標籤(索引)組成。
建立方式:
pd.Series([4,7,-5,3])
pd.Series([4,7,-5,3],index=['a','b','c','d'])
pd.Series({'a':1, 'b':2})
pd.Series(0, index=['a','b','c','d’])
獲取值數組和索引數組:values屬性和index屬性
Series比較像列表(數組)和字典的結合體。
Series支持數組的特性:
從ndarray建立Series:Series(arr)
與標量運算:sr*2
兩個Series運算:sr1+sr2
索引:sr[0], sr[[1,2,4]]
切片:sr[0:2](切片依然是視圖形式)
通用函數:np.abs(sr)
布爾值過濾:sr[sr>0]
統計函數:mean() sum() cumsum()
Series支持字典的特性(標籤):
從字典建立Series:Series(dic),
in運算:’a’ in sr、for x in sr
鍵索引:sr['a'], sr[['a', 'b', 'd']]
鍵切片:sr['a':'c']
其餘函數:get('a', default=0)等
pandas:Series數據對齊
pandas在運算時,會按索引進行對齊而後計算。若是存在不一樣的索引,則結果的索引是兩個操做數索引的並集。
例:
sr1 = pd.Series([12,23,34], index=['c','a','d'])
sr2 = pd.Series([11,20,10], index=['d','c','a',])
sr1+sr2
sr3 = pd.Series([11,20,10,14], index=['d','c','a','b'])
sr1+sr3
如何在兩個Series對象相加時將缺失值設爲0?
sr1.add(sr2, fill_value=0)
靈活的算術方法:add, sub, div, mul
缺失數據:使用NaN(Not a Number)來表示缺失數據。其值等於np.nan。內置的None值也會被當作NaN處理。
處理缺失數據的相關方法:
dropna() 過濾掉值爲NaN的行
fillna() 填充缺失數據
isnull() 返回布爾數組,缺失值對應爲True
notnull() 返回布爾數組,缺失值對應爲False
過濾缺失數據:sr.dropna() 或 sr[data.notnull()]
填充缺失數據:fillna(0)
pandas:整數索引
整數索引的pandas對象每每會使新手抓狂。
例:
sr = np.Series(np.arange(4.))
sr[-1]
若是索引是整數類型,則根據整數進行數據操做時老是面向標籤的。
loc屬性 以標籤解釋
iloc屬性 如下標解釋
pandas:DataFrame
查看數據經常使用屬性及方法:
index 獲取索引
T 轉置
columns 獲取列索引
values 獲取值數組
describe() 獲取快速統計
DataFrame各列name屬性:列名
rename(columns={})
查看數據經常使用屬性及方法:
index 獲取索引
T 轉置
columns 獲取列索引
values 獲取值數組
describe() 獲取快速統計
DataFrame各列name屬性:列名
rename(columns={})
DataFrame有行索引和列索引。
DataFrame一樣能夠經過標籤和位置兩種方法進行索引和切片。
DataFrame使用索引切片:
方法1:兩個中括號,先取列再取行。 df['A'][0]
方法2(推薦):使用loc/iloc屬性,一箇中括號,逗號隔開,先取行再取列。
loc屬性:解釋爲標籤
iloc屬性:解釋爲下標
向DataFrame對象中寫入值時只使用方法2
行/列索引部分能夠是常規索引、切片、布爾值索引、花式索引任意搭配。(注意:兩部分都是花式索引時結果可能與預料的不一樣)
經過標籤獲取:
df['A']
df[['A', 'B']]
df['A'][0]
df[0:10][['A', 'C']]
df.loc[:,['A','B']]
df.loc[:,'A':'C']
df.loc[0,'A']
df.loc[0:10,['A','C']]
經過位置獲取:
df.iloc[3]
df.iloc[3,3]
df.iloc[0:3,4:6]
df.iloc[1:5,:]
df.iloc[[1,2,4],[0,3]]
經過布爾值過濾:
df[df['A']>0]
df[df['A'].isin([1,3,5])]
df[df<0] = 0
DataFrame對象在運算時,一樣會進行數據對齊,行索引與列索引分別對齊。
結果的行索引與列索引分別爲兩個操做數的行索引與列索引的並集。
DataFrame處理缺失數據的相關方法:
dropna(axis=0,where='any',…)
fillna()
isnull()
notnull()
pandas:其餘經常使用方法
pandas經常使用方法(適用Series和DataFrame):
mean(axis=0,skipna=False)
sum(axis=1)
sort_index(axis, …, ascending) 按行或列索引排序
sort_values(by, axis, ascending) 按值排序
NumPy的通用函數一樣適用於pandas
apply(func, axis=0) 將自定義函數應用在各行或者各列上 ,func可返回標量或者Series
applymap(func) 將函數應用在DataFrame各個元素上
map(func) 將函數應用在Series各個元素上
pandas:時間對象處理
時間序列類型:
時間戳:特定時刻
固定時期:如2017年7月
時間間隔:起始時間-結束時間
Python標準庫:datetime
date time datetime timedelta
dt.strftime()
strptime()
靈活處理時間對象:dateutil包
dateutil.parser.parse()
成組處理時間對象:pandas
pd.to_datetime(['2001-01-01', '2002-02-02'])
產生時間對象數組:date_range
start 開始時間
end 結束時間
periods 時間長度
freq 時間頻率,默認爲'D',可選H(our),W(eek),B(usiness),S(emi-)M(onth),(min)T(es), S(econd), A(year),…
pandas:時間序列
時間序列就是以時間對象爲索引的Series或DataFrame。
datetime對象做爲索引時是存儲在DatetimeIndex對象中的。
時間序列特殊功能:
傳入「年」或「年月」做爲切片方式
傳入日期範圍做爲切片方式
豐富的函數支持:resample(), strftime(), ……
批量轉換爲datetime對象:to_pydatetime()
pandas:從文件讀取
讀取文件:從文件名、URL、文件對象中加載數據
read_csv 默認分隔符爲csv
read_table 默認分隔符爲\t
read_excel 讀取excel文件
讀取文件函數主要參數:
sep 指定分隔符,可用正則表達式如'\s+'
header=None 指定文件無列名
name 指定列名
index_col 指定某列做爲索引
skip_row 指定跳過某些行
na_values 指定某些字符串表示缺失值
parse_dates 指定某些列是否被解析爲日期,布爾值或列表
pandas:寫入到文件
-
寫入到文件:
-
to_csv
-
寫入文件函數的主要參數:
-
sep
-
na_rep 指定缺失值轉換的字符串,默認爲空字符串
-
header=False 不輸出列名一行
-
index=False 不輸出行索引一列
-
cols 指定輸出的列,傳入列表
-
其餘文件類型:json, XML, HTML, 數據庫
-
pandas轉換爲二進制文件格式(pickle):
-
save
-
load
歡迎關注本站公眾號,獲取更多信息