1. 程式人生 > >利用Python資料分析:pandas入門(五)

利用Python資料分析:pandas入門(五)

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)