Pandas模塊2

#! /user/bin/env python
#encoding=utf-8
__author__ = 'chw'
from pandas import Series,DataFrame
import pandas as pd
**# 重新索引**
# Series 對象的重新索引通過其 .reindex(index=None,**kwargs) 方法實現。
# **kwargs 中常用的參數有倆:method=None,fill_value=np.NaN:
ser=Series([-5,4.5,7.2],index=['a','e','d'])
# a=['a','b','d','e']
# b=['a','d','e']
# print ser.reindex(a)
# print ser.reindex(a,fill_value=0)
# method有錯誤
# .reindex() 方法會返回一個新對象,其 index 嚴格遵循給出的參數,method:{'backfill', 'bfill', 'pad', 'ffill', None}
# 參數用於指定插值(填充)方式,當沒有給出時,自動用 fill_value 填充,默認爲 NaN(ffill = pad,bfill = back fill,分別指插值時向前還是向後取值)
# print ser.reindex(b,fill_value=0,method='pad')

# DataFrame 對象的重新索引方法爲:.reindex(index=None,columns=None,**kwargs)。僅比 Series 多了一個可選的 columns 參數,用於給列索引。用法與上例類似,
# 只不過插值方法 method 參數只能應用於行,即軸 0。
data1={'a':['1','2'],'b':[201,202],'c':['q','w']}
dataframe=DataFrame(data1,index=['a','b'])
print dataframe
# print dataframe.reindex(index=['b','a'],columns=['c','b','a','e'],fill_value=0,method='ffill')

**# 刪除**
# 即刪除 Series 的元素或 DataFrame 的某一行(列)的意思,
# .drop(labels, axis=0)  表示刪除行
# .drop(labels, axis=1)  表示刪除列
# print ser.drop('e')
# print dataframe.drop(['a','b'],axis=1)

**#索引和切片**
# print ser[:'e']  #等價於ser[:2]

#  DataFrame 對象的索引方式,因爲他有兩個軸向(雙重索引)。
# 可以這麼理解:DataFrame 對象的標準切片語法爲:.ix[::,::]dataframe
# .ix 對象可以接受兩套切片,分別爲行(axis=0)和列(axis=1)的方向:
# print dataframe.ix[:2,1]

# 使用布爾型數組的情況,注意行與列的不同切法(列切法的 : 不能省):


# **算術運算和數據對齊**
# pandas 最重要的一個功能是,它可以對不同索引的對象進行算術運算。在將對象相加時,
# 結果的索引取索引對的並集。自動的數據對齊在不重疊的索引處引入空值,默認爲 NaN。
# 當不希望在運算結果中出現 NA 值時,可以使用前面 reindex 中提到過 fill_value 參數,
# 不過爲了傳遞這個參數,就需要使用對象的方法,

# **函數應用和映射**
# Numpy 的 ufuncs(元素級數組方法)也可用於操作 pandas 對象。
# 當希望將函數應用到 DataFrame 對象的某一行或列時,可以使用
# .apply(func, axis=0, args=(), **kwds) 方法。
data2={'a':[1,2],'b':[201,202],'c':[5,6]}
dataframe2=DataFrame(data2,index=['a','b'])
print dataframe2
f=lambda x:x.max()-x.min()
print dataframe2.apply(f,axis=1)

**# 排序和排名**
# Series 的 sort_index(ascending=True) 方法可以對 index 進行排序操作,ascending 參數用於控制升序或降序,默認爲升序。
# 若要按值對 Series 進行排序,當使用 .order() 方法,任何缺失值默認都會被放到 Series 的末尾。
# 在 DataFrame 上,.sort_index(axis=0, by=None, ascending=True) 方法多了一個軸向的選擇參數與一個 by 參數,
# by 參數的作用是針對某一(些)列進行排序(不能對行使用 by 參數):

# 排名(Series.rank(method='average', ascending=True))的作用與排序的不同之處在於,他會把對象的 values 替換成名次(從 1 到 n)。
# 這時唯一的問題在於如何處理平級項,方法裏的 method 參數就是起這個作用的,他有四個值可選:average, min, max, first。
# DataFrame 的 .rank(axis=0, method='average', ascending=True) 方法多了個 axis 參數,可選擇按行或列分別進行排名,暫時好像沒有針對全部元素的排名方法。

**# 統計方法**
# pandas 對象有一些統計方法。它們大部分都屬於約簡和彙總統計,用於從 Series 中提取單個值,或從 DataFrame 的行或列中提取一個 Series。
# 比如 DataFrame.mean(axis=0,skipna=True) 方法,當數據集中存在 NA 值時,這些值會被簡單跳過,除非整個切片(行或列)全是 NA,
# 如果不想這樣,則可以通過 skipna=False 來禁用此功能:

# count 非 NA 值的數量
# describe  針對 Series 或 DF 的列計算彙總統計
# min , max 最小值和最大值
# argmin , argmax   最小值和最大值的索引位置(整數)
# idxmin , idxmax   最小值和最大值的索引值
# quantile  樣本分位數(0 到 1)
# sum   求和
# mean  均值
# median    中位數
# mad   根據均值計算平均絕對離差
# var   方差
# std   標準差
# skew  樣本值的偏度(三階矩)
# kurt  樣本值的峯度(四階矩)
# cumsum    樣本值的累計和
# cummin , cummax   樣本值的累計最大值和累計最小值
# cumprod   樣本值的累計積
# diff  計算一階差分(對時間序列很有用)
# pct_change    計算百分數變化

# **處理缺失數據**
# pandas 中 NA 的主要表現爲 np.nan,另外 Python 內建的 None 也會被當做 NA 處理。
# 處理 NA 的方法有四種:**dropna , fillna , isnull , notnull** 。
# is(not)null
# 這一對方法對對象做元素級應用,然後返回一個布爾型數組,一般可用於布爾型索引。

# dropna
# 對於一個 Series,dropna 返回一個僅含非空數據和索引值的 Series
# 問題在於對 DataFrame 的處理方式,因爲一旦 drop 的話,至少要丟掉一行(列)。
# 這裏的解決方式與前面類似,還是通過一個額外的參數:dropna(axis=0, how='any', thresh=None) ,
# how 參數可選的值爲 any 或者 all。all 僅在切片元素全爲 NA 時才拋棄該行(列)。
# 另外一個有趣的參數是 thresh,該參數的類型爲整數,它的作用是,
# 比如 thresh=3,會在一行中至少有 3 個非 NA 值時將其保留。

# fillna
# fillna(value=None, method=None, axis=0) 中的 value 參數除了基本類型外,
# 還可以使用字典,這樣可以實現對不同的列填充不同的值。method 的用法與前面
# .reindex() 方法相同,這裏不再贅述。

**# inplace 參數**
# 前面有個點一直沒講,結果整篇示例寫下來發現還挺重要的。
# 就是 Series 和 DataFrame 對象的方法中,凡是會對數組作出修改並返回一個新數組的,
# 往往都有一個 replace=False 的可選參數。如果手動設定爲 True,那麼原數組就可以被替換。

可以利用pandas 處理類目型的特徵因子化
以Cabin爲例,原本一個屬性維度,因爲其取值可以是[‘yes’,’no’],而將其平展開爲’Cabin_yes’,’Cabin_no’兩個屬性
原本Cabin取值爲yes的,在此處的”Cabin_yes”下取值爲1,在”Cabin_no”下取值爲0
原本Cabin取值爲no的,在此處的”Cabin_yes”下取值爲0,在”Cabin_no”下取值爲1
我們使用pandas的”get_dummies”來完成這個工作
dummies_Cabin=pandas.get_dummies(*.Cabin, prefix=’Cabin’)
或者
dummies_Cabin=pandas.get_dummies(*[‘Cabin’], prefix=’Cabin’)
dummies_Cabin表示兩列屬性Cabin_yes 和 Cabin_no

參考文獻:http://www.open-open.com/lib/view/open1402477162868.html#articleHeader10
http://www.cnblogs.com/chaosimple/p/4153083.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章