#! /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