python进阶数据分析_python数据分析进阶之pandas
摘要Pandas是基于numpy来构建的,让numpy为中心的应用变得更加简单。Pandas主要包括两个数据结构,Series和DataFrame。既能处理时间序列的数据也能处理非时间序列的数据,同时在处理缺省值上面非常灵活。一.主要数据结构Series可以把series理解为一维数组或者向量,由value以及index组成。1.创建series>>> import pandas
摘要
Pandas是基于numpy来构建的,让numpy为中心的应用变得更加简单。Pandas主要包括两个数据结构,Series和DataFrame。既能处理时间序列的数据也能处理非时间序列的数据,同时在处理缺省值上面非常灵活。
一.主要数据结构
Series
可以把series理解为一维数组或者向量,由value以及index组成。
1.创建series
>>> import pandas as pd
>>> obj=pd.Series([10,9,8,7,6])
>>> obj
0 10
1 9
2 8
3 7
4 6
第一列的0-4就是默认的index,第二列就是value。可以手动指定index,如:
>>> obj2=pd.Series([10,9,8,7],index=['one','two','three',4])
>>> obj2
one 10
two 9
three 8
4 7
dtype: int64
实际上Series也能理解是python的一个字典,当然也能通过传入一个字典来创建一个Series,字典的key就对应索引,字典的value就是series的value,如:
>>> dic_data={'owen':18,'crespo':28,'ronaldo':20,'cambiasso':46}
>>> obj3=pd.Series(dic_data)
>>> obj3
cambiasso 46
crespo 28
owen 18
ronaldo 20
dtype: int64
也可以指定index,字典中的key不在指定的index中的话,就填充NaN,如:
>>> name=['owen','ronaldo','cambiasso','veron']
>>> obj4=pd.Series(dic_data,name)
>>> obj4
owen 18.0
ronaldo 20.0
cambiasso 46.0
veron NaN
dtype: float64
2,Series的访问
可以通过下标或者索引来直接访问,如:
>>> obj2[2]
8
>>> obj2['one']
10
>>> obj2[['two',4]]
two 9
4 7
dtype: int64
DataFrame
DataFrame是表格型数据,有行以及列,类似numpy中的矩阵mt,可以被看做是由Series组成的字典,与R语言中的dataframe类似。
1.创建DataFrame
由字典或者numpy创建,key就是默认的列名,而行默认从0开始排序下去,如:
>>> data={'year':[2001,2002,2003,2001,2005],'country':['china','china','usa','england','German'],'population':[200,300,400,100,50]}
>>> df=pd.DataFrame(data)
>>> df
country population year
0 china 200 2001
1 china 300 2002
2 usa 400 2003
3 england 100 2001
4 German 50 2005
也可以指定列名以及index,如果字典中不存在,就填充NaN,与创建series类似。
2.访问DataFrame
可以按照字典或者属性的方式来访问列,如:
>>> df['country']
0 china
1 china
2 usa
3 england
4 German
Name: country, dtype: object
>>> df.year
0 2001
1 2002
2 2003
3 2001
4 2005
Name: year, dtype: int64
可以使用ix方法来访问某一行,如:
>>> df.ix[0]
country china
population 200
year 2001
Name: 0, dtype: object
使用如下的ix+列属性或者列索引的方式来访问行列切片,如:
>>> df.ix[['a','d'],[1,2]]
usa england
a 1 2
d 7 8
二.功能操作
1.重新索引
比如时间序列需要严格的一些排序,那么就有必要进行重新索引。Reindex会根据新索引进行重新排序,没有的索引会使用NaN来提点,如:
>>> obj=Series([4,5,6,7],index=['d','b','a','c'])
>>> obj
d 4
b 5
a 6
c 7
dtype: int64
>>> obj2=obj.reindex(['a','b','c','d','e'])
>>> obj2
a 6.0
b 5.0
c 7.0
d 4.0
e NaN
dtype: float64
利用reindex,对于不存在对应index的缺省值,也可以使用很多方法来填充,如:
>>> obj3=Series(['blue','yewllo','red'],index=[0,2,4])
>>> obj3
0 blue
2 yewllo
4 red
dtype: object
>>> obj3.reindex(range(6))
0 blue
1 NaN
2 yewllo
3 NaN
4 red
5 NaN
dtype: object
>>> obj3.reindex(range(6),method='ffill')
0 blue
1 blue
2 yewllo
3 yewllo
4 red
5 red
dtype: object
红色就代表使用ffill(或者pad)进行前向填充,同理还有bfill或者backfll后向填充。
同理,DataFrame也能使用reindex来进行重新索引,默认是操作行索引,使用columns来操作列索引,如:
>>> df=DataFrame(np.arange(9).reshape(3,3),index=['a','c','d'],columns=['china','usa','england'])
>>> df
china usa england
a 0 1 2
c 3 4 5
d 6 7 8
>>> df2=df.reindex(['a','b','c','d'])
>>> df2
china usa england
a 0.0 1.0 2.0
b NaN NaN NaN
c 3.0 4.0 5.0
d 6.0 7.0 8.0
>>> df3=df.reindex(columns=['usa','china','england','german'])
>>> df3
usa china england german
a 1 0 2 NaN
c 4 3 5 NaN
d 7 6 8 NaN
当然也能同时操作行以及列,如:
>>> df3=df.reindex(index=['a','b','c','d'],columns=['usa','china','england','german'],method="backfill")
>>> df3
usa china england german
a 1 0 2 NaN
b 4 3 5 NaN
c 4 3 5 NaN
d 7 6 8 NaN
2.抛弃轴项
使用drop方法可以抛弃某行或者某列项,默认删除行,如:
>>> df3.drop('a')
usa china england german
b 4 3 5 NaN
c 4 3 5 NaN
d 7 6 8 NaN
使用axis=1来操作列,如:
>>> df3.drop(['china','german'],axis=1)
usa england
a 1 2
b 4 5
c 4 5
d 7 8
3.算术以及对齐
可以对不同索引之间的数据进行运算,如果存在不同的索引时,结果就是并集,同时默认使用NaN来填充,如:
>>> s1=Series([1,3,5,7,9],index=['a','b','c','d','e'])
>>> s2=Series([2,4,6,8,10],index=['a','b','g','d','h'])
>>> s1+s2
a 3.0
b 7.0
c NaN
d 15.0
e NaN
g NaN
h NaN
dtype: float64
4.汇总和计算描述统计
DataFrame默认是针对列来进行汇总计算,如:
>>> df
china usa england
a 0 1 2
c 3 4 5
d 6 7 8
>>> df.sum()
china 9
usa 12
england 15
dtype: int64
>>> df.mean()
china 3.0
usa 4.0
england 5.0
dtype: float64
>>> df.max()
china 6
usa 7
england 8
dtype: int32
可以使用axis=1参数来操作行,如:
>>> df.sum(axis=1)
a 3
c 12
d 21
dtype: int64
除了以上举例的sum总和,mean均值,max最大值之外,还包括如下几种主流的汇总函数:
Count(排除NA之外的数量),describe(汇总描述,包括sum,mean,max,min等等),quantile(分位数),median(中位数),var(方差),std(标准差),skew(偏度),kurt(峰度)。
三.缺失值处理
Pandas使用NaN(not a number)来表示缺失值,只是一种标记。使用numpy的nan来生成,如:
>>> np.nan
nan
使用isnull来判断是否是缺失值,返回True或者False,如:
>>> df
china usa england
a 0 1 2
c 3 4 5
d 6 7 8
>>> df.isnull()
china usa england
a False False False
c False False False
d False False False
Series使用dropna来抛弃掉缺失值,如:
>>> s2=s1.reindex(['a','e','f','b','d','c'])
>>> s2
a 1.0
e 9.0
f NaN(被drop掉)
b 3.0
d 7.0
c 5.0
dtype: float64
>>> s2.dropna()
a 1.0
e 9.0
b 3.0
d 7.0
c 5.0
dtype: float64
DataFrame使用how=‘all’参数来删除行全部为NaN的行,如:
>>> df2
china england german england
a 0.0 2.0 NaN 2.0
b NaN NaN NaN NaN(被drop掉)
c 3.0 5.0 NaN 5.0
d 6.0 8.0 NaN 8.0
>>> df2.dropna(how='all')
china england german england
a 0.0 2.0 NaN 2.0
c 3.0 5.0 NaN 5.0
d 6.0 8.0 NaN 8.0
使用axis=1来控制列,如:
>>> df2.dropna(how='all',axis=1)
china england england
a 0.0 2.0 2.0
b NaN NaN NaN
c 3.0 5.0 5.0
d 6.0 8.0 8.0
如果不想丢弃掉缺失值,可以使用fillna()函数来填充。如:
>>> df3.fillna(1)
china garman usa england british iceland swiss italy france
a 0.0 1.0 1.0 2.0 1.0 1.0 1.0 1.0 1.0
b 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
c 3.0 1.0 4.0 5.0 1.0 1.0 1.0 1.0 1.0
d 6.0 1.0 7.0 8.0 1.0 1.0 1.0 1.0 1.0
e 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
f 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
g 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
也可以使用method来控制填充内容,如:
>>> df3.fillna(method='ffill')
china garman usa england british iceland swiss italy france
a 0.0 NaN 1.0 2.0 NaN NaN NaN NaN NaN
b 0.0 NaN 1.0 2.0 NaN NaN NaN NaN NaN
c 3.0 NaN 4.0 5.0 NaN NaN NaN NaN NaN
d 6.0 NaN 7.0 8.0 NaN NaN NaN NaN NaN
e 6.0 NaN 7.0 8.0 NaN NaN NaN NaN NaN
f 6.0 NaN 7.0 8.0 NaN NaN NaN NaN NaN
g 6.0 NaN 7.0 8.0 NaN NaN NaN NaN NaN
使用其他值来填充,如平均值:
>>> df3.fillna(df['usa'].mean())
china garman usa england british iceland swiss italy france
a 0.0 4.0 1.0 2.0 4.0 4.0 4.0 4.0 4.0
b 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0
c 3.0 4.0 4.0 5.0 4.0 4.0 4.0 4.0 4.0
d 6.0 4.0 7.0 8.0 4.0 4.0 4.0 4.0 4.0
e 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0
f 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0
g 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0
更多推荐



所有评论(0)