python数据分析总结

利用python进行数据分析(其二)

pandas入门

pandas含有使数据清洗和分析工作变得更快更简单的数据结构和操作工具,可同数值计算工具NumPy和SciPy,分析库statsmodels和scikit-learn和数据可视化库matplotlib。其中pandas是专门为处理表格和混杂数据设计,而NumPy更常用于处理统一的数据数组数据。

pandas的数据结构

1.Series,一种类似于一维数组的对象,由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成,表现形式为:左边是索引,右边是值

In [15]: obj2 = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
In [16]: obj2
Out[16]:
d 4
b 7
a -5
c 3
dtype: int64

2.DataFrame,是一个表格型的数据结构,含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等);DataFrame既有行索引也有列索引,可以看作是由Series组成的字典

data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'N
evada'],
   'year': [2000, 2001, 2002, 2001, 2002, 2003],
   'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
In [45]: frame
Out[45]:
   	pop 	 state 	 year
0 		1.5	  Ohio 	 2000
1		1.7   Ohio   2001
2       3.6   Ohio   2002
3       2.4   Nevada 2001
4       2.9   Nevada 2002
5       3.2   Nevada 2003

另列出DataFrame构造函数所能接受的各种数据
在这里插入图片描述
3.索引对象,它负责管理轴标签和其他元数据(比如轴名称等),构建Series或DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index:

In [76]: obj = pd.Series(range(3), index=['a', 'b', 'c'])
In [77]: index = obj.index
In [78]: index
Out[78]: Index(['a', 'b', 'c'], dtype='object')
In [79]: index[1:]
Out[79]: Index(['b', 'c'], dtype='object')

其中每个索引都有一些方法和属性,可用于设置逻辑并回答有关该索引所包含的数据常见问题,这些函数有:在这里插入图片描述

基本功能

1.重新索引: 是pandas对象的一个重要方法(reindex),可以创建一个新对象,它的数据符合新的索引。

obj = pd.Series([4.5, 7.2, -5.3, 3.6], index=['d', 'b',
'a', 'c'])
obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'])
obj2
a -5.3
b 7.2
c 3.6
d 4.5
e NaN
dtype: float64

一些列出reindex函数的各参数及说明
在这里插入图片描述
2.丢弃指定轴上的项: 丢弃某条轴上的一个或多个项需要有一个索引数组或列表,由于需要执行一些数据整理和集合逻辑,因此drop方法返回的是一个在指定轴上铲除指定值得新对象

In [105]: obj = pd.Series(np.arange(5.), index=['a', 'b', 'c', '
d', 'e'])
In [106]: obj
Out[106]:
a 0.0
b 1.0
c 2.0
d 3.0
e 4.0
dtype: float64
In [107]: new_obj = obj.drop('c')
In [108]: new_obj
Out[108]:
a 0.0
b 1.0
d 3.0
e 4.0
dtype: float64

3.索引、选取和过滤: Series的索引(obj[…])类似于NumPy数组的索引,特别的是Series的索引值不只是整数。

In [117]: obj = pd.Series(np.arange(4.), index=['a', 'b', 'c', '
d'])
In [118]: obj
Out[118]:
a 0.0
b 1.0
c 2.0
d 3.0
dtype: float64
In [119]: obj['b']
Out[119]: 1.0
In [120]: obj[1]
Out[120]: 1.0
In [121]: obj[2:4]
Out[121]:
c 2.0
d 3.0
dtype: float64
In [122]: obj[['b', 'a', 'd']]
Out[122]:
b 1.0
a 0.0
d 3.0
dtype: float64
In [123]: obj[[1, 3]]
Out[123]:
b 1.0
d 3.0
dtype: float64
In [124]: obj[obj < 2]
Out[124]:
a 0.0
b 1.0
dtype: float64

4.用loc和iloc进行选取: 在DataFrame的行的标签索引,可以使用类似于NumPy的标记,使用轴标签(loc)或整数(iloc),从DataFrame选择行和列的子集。

data.loc['Colorado', ['two', 'three']]
data.iloc[2, [3, 0, 1]]
four 	11
one 		8
two 	9
Name: Utah, dtype: int64
ata.loc[:'Utah', 'two']
Ohio	 0
Colorado	 5
Utah 	9

在这里插入图片描述
5.整数索引: 为了进行统一,如果轴索引含有整数,数据选取优先使用标签,为保证准确,可以用loc或iloc:

In [147]: ser[:1]
Out[147]:
0 0.0
dtype: float64
In [148]: ser.loc[:1]
Out[148]:
0 0.0
1 1.0
dtype: float64
In [149]: ser.iloc[:1]
Out[149]:
0 0.0
dtype: float64

6.算术运算和数据对齐: pandas可以对不同索引的对象进行算术运算,在将对象相加时,若存在不同的索引对,则该结果的索引就是该索引对的并集

s1 = pd.Series([7.3, -2.5, 3.4, 1.5], index=['a', 'c',
'd', 'e'])
s2 = pd.Series([-2.1, 3.6, -1.5, 4, 3.1],: index=['a', 'c', 'e', 'f', 'g'])
s1 + s2
a 	5.2
c 	1.1
d 	NaN
e 	0.0
f 	NaN
g 	NaN
dtype: float64

7.DataFrame和Series之间的运算: 默认情况下,DataFrame和Series之间的算术运算会将Series的索引匹配到DataFrame的列,然后沿着行一直向下广播:

frame = pd.DataFrame(np.arange(12.).reshape((4, 3)),
.....: columns=list('bde'),
.....: index=['Utah', 'Ohio', 'Texas', '
Oregon'])
series = frame.iloc[0]
frame - series
   		b 		d	 	e
Utah 	0.0 	0.0 	0.0
Ohio 	3.0		 3.0 	3.0
Texas 	6.0 	6.0 	6.0
Oregon 	9.0 	9.0		 9.0

8.函数应用和映射: NumPy的ufuncs(元素级数组方法)可以操作pandas对象

rame = pd.DataFrame(np.random.randn(4, 3), columns=li
st('bde'),
.....: index=['Utah', 'Ohio', 'Texas', '
Oregon'])
In [191]: frame
Out[191]:
   		b 		d 		e
Utah -0.204708 0.478943 -0.519439
Ohio -0.555730 1.965781 1.393406
Texas 0.092908 0.281746 0.769023
Oregon 1.246435 1.007189 -1.296221
In [192]: np.abs(frame)
Out[192]:
   		b 		d 		e
Utah 0.204708 0.478943 0.519439
Ohio 0.555730 1.965781 1.393406
Texas 0.092908 0.281746 0.769023
Oregon 1.246435 1.007189 1.296221

9.排序和排名: 根据条件对数据集排序也是一种重要的内置运算。若是要对行或列索引进行排序(按照字典排序),可使用sort_index方法,它将返回一个已排序的新对象:

汇总和计算描述

pandas对象有一组常用的数学和统计方法,其中大部分书友约简和汇总统计,例如用于从Series中提取单个值(如sum或mean)或从DataFrame的行或列中提取一个Series。

In [230]: df = pd.DataFrame([[1.4, np.nan], [7.1, -4.5],
.....: [np.nan, np.nan], [0.75, -1.3]],
.....: index=['a', 'b', 'c', 'd'],
.....: columns=['one', 'two'])
In [233]: df.sum(axis=1)
Out[233]:
a 1.40
b 2.60
c NaN
d -0.55

以下列出这些约简的常用选项以及所有与描述统计相关的方法:
在这里插入图片描述
在这里插入图片描述
另外,有些汇总统计(如相关系数和协方差)是通过参数对计算出来的,我们使用Yahoo!Finance的股票价格和成交量来显示
。首先使用 anocoda prompt 输命令下载包

conda install pandas-datareader

在使用pandas_datareader模块下载一些股票数据:

import pandas_datareader.data as web
all_data = {ticker: web.get_data_yahoo(ticker)
for ticker in ['AAPL', 'IBM', 'MSFT', 'GOOG']}
price = pd.DataFrame({ticker: data['Adj Close']
for ticker, data in all_data.items()})
volume = pd.DataFrame({ticker: data['Volume']
for ticker, data in all_data.items()})

计算价格的百分数变化:

In [242]: returns = price.pct_change()
In [243]: returns.tail()
Out[243]:
AAPL GOOG IBM MSFT
Date
2016-10-17 -0.000680 0.001837 0.002072 -0.003483
2016-10-18 -0.000681 0.019616 -0.026168 0.007690
2016-10-19 -0.002979 0.007846 0.003583 -0.002255
2016-10-20 -0.000512 -0.005652 0.001719 -0.004867
2016-10-21 -0.003930 0.003011 -0.012474 0.042096

cov来计算协方差:

In [244]: returns['MSFT'].corr(returns['IBM'])
Out[244]: 0.49976361144151144
In [245]: returns['MSFT'].cov(returns['IBM'])
Out[245]: 8.8706554797035462e-05

还有一类方法(胃一直、值计数以及成员资格)可以从以为Series的值中抽取信息,可以参考下面例子,首先是unique,他可以得到Series中的唯一值数组:

In [251]: obj = pd.Series(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c'
, 'c'])
n [252]: uniques = obj.unique()
In [253]: uniques
Out[253]: array(['c', 'a', 'd', 'b'], dtype=object)

其次isin用于判断矢量化集合的成员资格,可用于过滤Series中或DataFrame列中的数据的子集:

n [256]: obj
Out[256]:
0 c
1 a
2 d
3 a
4 a
5 b
6 b
7 c
8 c
dtype: object
In [257]: mask = obj.isin(['b', 'c'])
In [258]: mask
Out[258]:
0 True
1 False
2 False
3 False
4 False
5 True
6 True
7 True
8 True
dtype: bool
In [259]: obj[mask]

另再给出这几个方法的一些参考信息:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值