Pandas常用接口

Series和Frame

Series類似于一維數(shù)組,由一組數(shù)據(jù)和索引組成

obj = Series([4, 7, -5, 3]) # 默認(rèn)索引為0開始的int類型
obj = Series([4, 7, -5, 3], index = ['d', 'b', 'a', 'c']) # 手動(dòng)設(shè)置索引
obj.values # 獲得數(shù)據(jù)
obj.index # 獲得索引
obj['d'] # 通過(guò)下標(biāo)獲取值
obj[['d', 'b', 'c']] # 一次獲取多個(gè)值
'b' in obj # Series也可以看作定長(zhǎng)有序字典
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
obj = Series(sdata) # 通過(guò)python字典創(chuàng)建Series
pd.isunll(obj) # 判斷obj中哪些值為NaN,對(duì)應(yīng)pd.notnull(), obj.isnull()
obj.name = 'population'
obj.index.name = 'state' # 給obj設(shè)置名字

DataFrame是表格型數(shù)據(jù),可以看成是Series組成的字典

data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'], 
        'year': [2000, 2001, 2002, 2001, 2002], 
        'population': [1.5, 1.7, 3.6, 2.4, 2.9]} # 創(chuàng)建data
frame = DataFrame(data) # 創(chuàng)建DataFrame
frame = DataFrame(data, columns = ['year', 'state', 'population']) # 設(shè)定column順序
frame['state'] # 獲取Series,等效于frame.state
frame.ix[2] # 獲取行內(nèi)容
frame.debt = np.arange(5.) # 給列賦值
frame['debt'] = Series([-1.5, -2.6, -4.5], index = ['TWO', 'THREE', 'FIVE']) # 通關(guān)Series給列賦值,依據(jù)index填充
frame['eastern'] = frame.state == 'Ohio' # 為不存在的列賦值會(huì)創(chuàng)建新列
del frame['eastern'] # 刪除列

下圖是可以用于構(gòu)建DataFrame的數(shù)據(jù)


initlist1.png

Index也是一個(gè)數(shù)組對(duì)象,只讀

index = obj.index
'Ohio' in frame.cloumns # columns也是一個(gè)index數(shù)組

基礎(chǔ)功能

reindex

# Series
obj = Series([4.5, 7.2, -5.3, 3.6], index = ['d', 'b', 'a', 'c'])
obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e']) # reindex,不存在用NaN
obj.reindex(['a', 'b', 'c', 'd', 'e'], fill_value=0) # 用0填充空值
obj = Series(['blue', 'purple', 'yellow'], index = [0, 2, 4])
obj7.reindex(range(6), method='ffill') # 前項(xiàng)值填充,bfill后項(xiàng)值填充
# DataFrame
frame = DataFrame(np.arange(9).reshape((3, 3)), index=['a','c','d'], columns=['Ohio','Texas','California'])
frame.reindex(['a', 'b', 'c', 'd']) # 修改索引
states = ['Texas', 'Utah', 'California']
frame.reindex(columns=states) # 修改列索引
frame.reindex(index=['a', 'b', 'c', 'd'], method='ffill', columns=states) # 同時(shí)修改行列索引
frame.ix[['a', 'b', 'c', 'd'], states] # 等效于上一行

下圖是reindex的參數(shù)列表


paralist1.png

drop用于丟棄行

data = DataFrame(np.arange(16).reshape((4, 4)), index = ['Ohio', 'Colorado', 'Utah', 'New York'], columns = ['one', 'two', 'three', 'four'])
data.drop(['Colorado', 'Utah']) # 丟棄行
data.drop('two', axis = 1) # 丟棄列

pandas的index切片末端是包含的

obj = Series(np.arange(4.), index = ['a', 'b', 'c', 'd'])
obj['b'] # == obj[1]
obj['b':'d'] # == obj[1:4],前面包含,后面不包含
data.ix['Colorado', ['two', 'three']] # 使用ix選取子集,使用column名
data.ix[['Colorado', 'Utah'], [3, 0, 1]] # 使用column序號(hào)選取

算數(shù)運(yùn)算

df1 = DataFrame(np.arange(9.).reshape((3, 3)), columns = list('bcd'), index = ['Ohio', 'Texas', 'Colorado'])
df2 = DataFrame(np.arange(12.).reshape((4, 3)), columns = list('bce'), index = ['Utah', 'Ohio', 'Texas', 'Oregon'])
df1 + df2 # 使用運(yùn)算符
df1.add(df2, fill_value = 0) # 使用函數(shù)

Series和DataFrame相加使用廣播
np的函數(shù)也可以使用在pandas對(duì)象上

frame = DataFrame(np.random.randn(4, 3), columns = list('bde'), index = ['Utah', 'Ohio', 'Texas', 'Oregon'])
np.abs(frame)
f = lambda x: x.max() - x.min()
frame.apply(f) # 在行上應(yīng)用函數(shù)
frame.apply(f, axis = 1) # 在列上應(yīng)用函數(shù)

排序

obj = Series(range(4), index = ['d', 'a', 'b', 'c'])
obj.sort_index() # 根據(jù)index排序
obj.order() # 按值排序
frame.sort_index(by='b') # DataFrame按某列排序
frame.sort_index(by=['a', 'b']) # 按多列排序
obj.rank() # 排名,破壞平級(jí)關(guān)系
paralist2.png

index是可重復(fù)的

obj = Series(range(5), index = ['a', 'a', 'b', 'b', 'c'])
obj.index.is_unique # False
obj['a'] # 返回一個(gè)Series

數(shù)學(xué)統(tǒng)計(jì)

df = DataFrame([[1.4, np.nan], [7.1, -4.5], [np.nan, np.nan], [0.75, -1.3]], index = ['a', 'b', 'c', 'd'], columns = ['one', 'two'])
df.sum() # 列求和
df.sum(axis = 1) # 行求和
df.idxmin() # 返回最小值的index
df.cumsum() # 累積求和
funclist7.png

funclist8.png

相關(guān)系數(shù)與協(xié)方差
相關(guān)系數(shù):https://zh.wikipedia.org/wiki/%E7%9A%AE%E5%B0%94%E9%80%8A%E7%A7%AF%E7%9F%A9%E7%9B%B8%E5%85%B3%E7%B3%BB%E6%95%B0
協(xié)方差:https://zh.wikipedia.org/wiki/%E5%8D%8F%E6%96%B9%E5%B7%AE

returns.MSFT.corr(returns.IBM) # 計(jì)算相關(guān)系數(shù)
returns.MSFT.cov(returns.IBM) # 計(jì)算協(xié)方差

缺失數(shù)據(jù)處理

data = Series([1, np.nan, 3.5, np.nan, 7])
data.dropna() # 拋棄nan數(shù)據(jù), 等價(jià)于data[data.notnull()]
data.fillna(0) # 使用0填充nan數(shù)據(jù)
data.fillna({1:0.5, 3:-1}) # 對(duì)不同行的nan填充不同數(shù)據(jù)
data.fillna(0, inplace=True) # fillna默認(rèn)返回新對(duì)象,使用inplace參數(shù)進(jìn)行就地修改
# DataFrame的dropna()函數(shù)默認(rèn)丟棄行
paralist3.png

層次化索引

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.index # MultiIndex (類似于字典)
data.unstack() # 將數(shù)據(jù)重新安置到DataFrame中
data.unstack().stack() # 逆運(yùn)算
frame = DataFrame(np.arange(12).reshape((4, 3)), index = [['a', 'a', 'b', 'b'], [1, 2, 1, 2]], columns = [['Ohio', 'Ohio', 'Colorado'], ['Green', 'Red', 'Green']]) # DataFrame中行列都可以用MultiIndex
frame.index.names = ['key1', 'key2']
frame.columns.names = ['state', 'color'] # 給行列設(shè)置名稱
frame.swaplevel('key1', 'key2') # 交換層級(jí)
frame.sum(level='key2') # 選取level求和
frame = DataFrame({'a': range(7), 'b': range(7, 0, -1), 'c': ['one', 'two', 'three', 'four', 'five', 'six', 'seven'], 'd': [0, 1, 2, 0, 1, 2, 3]}) # 按列創(chuàng)建DataFrame
frame2 = frame.set_index(['c', 'd']) # 將列轉(zhuǎn)換為index
frame2.reset_index() # 將index轉(zhuǎn)換為列

數(shù)據(jù)存取

讀取數(shù)據(jù)

pd.read_csv('ch1/ex1.csv') # 默認(rèn)間隔符是逗號(hào)
pd.read_csv('ch1/ex2.csv', names=['a', 'b', 'c', 'd', 'message']) # 設(shè)定列名
pd.read_table('ch1/ex1.csv') # 默認(rèn)間隔符是制表符
pd.read_table('ch1/ex3.csv', sep='\s+') # 也可以使用正則表達(dá)式作為分隔符
paralist4.png

paralist5.png

寫入數(shù)據(jù)到文本

data.to_csv('ch1/out.csv')
Series.from_csv('ch1/tseries.csv') # 讀取數(shù)據(jù)到Series
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容