利用Python資料分析:pandas入門(五)
阿新 • • 發佈:2019-01-07
from pandas import Series,DataFrame import pandas as pd import numpy as np from numpy import nan as NA df = DataFrame(np.random.randn(7,3)) df.ix[:4,1] = NA df.ix[:2,2] = NA df df.fillna(0) # 將缺失值填充為0 df.fillna({1:0.5,3:-1}) # 通過字典來呼叫fillna 實現對不同的列填充不同的值 # fillna會預設返回新的物件,但是也可以對現有的物件就地進行修改 _ = df.fillna(0,inplace=True) df df = DataFrame(np.random.randn(6,3)) df.ix[2:,1] = NA;df.ix[4:,2] = NA df df.fillna(method='ffill') # 對reindex有效的插值方法也可以用於fillna df.fillna(method='ffill', limit=2) # 只填充第三列 data = Series([1,NA,3.5,NA,7]) data.fillna(data.mean()) # 層次化索引 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 ''' a 1 -1.455854 2 -0.847865 3 2.115079 b 1 -1.227672 2 0.355481 3 0.301750 c 1 -0.214539 2 -0.653013 d 2 -0.145661 3 -0.374012 ''' # 這就是帶有 MultiIndex索引的Series的格式化輸出 data.index '''MultiIndex(levels=[[u'a', u'b', u'c', u'd'], [1, 2, 3]], labels=[[0, 0, 0, 1, 1, 1, 2, 2, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 1, 2]]) ''' data['b'] # 子集選取 data['b':'c'] data.ix[['b','d']] data[:,2] # 在內層進行選取 data.unstack() # 通過unstakck方法重新安排到一個dataframe中 data.unstack().stack() # unstack的逆運算是stack frame = DataFrame(np.arange(12).reshape((4,3)), index=[['a','a','b','b'],[1,2,1,2]], columns=[['Ohio','Ohio','Colorado'],['Green','red','Green']]) frame # 每條軸也可以有層次索引 ''' Ohio Colorado Green red Green a 1 0 1 2 2 3 4 5 b 1 6 7 8 2 9 10 11 ''' frame.index.names = ['key1','key2'] # 每一層的名字 frame.columns.names = ['state','color'] frame ''' color Green red key1 key2 a 1 0 1 2 3 4 b 1 6 7 2 9 10 ''' frame['Ohio'] # 重排分級順序 frame.swaplevel('key1','key2') # 對這兩層的索引進行交換 ''' state Ohio Colorado color Green red Green key2 key1 1 a 0 1 2 2 a 3 4 5 1 b 6 7 8 2 b 9 10 11 ''' frame.sortlevel(1) # 根據單個級別中的值對資料進行排序 frame.swaplevel(0,1).sortlevel(0) # 根據級別的總計 frame.sum(level ='key2') # 根據不同的級別進行合計計算 frame.sum(level ='color',axis = 1)