量化投資與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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM