初识numpy与Pandas

在数据分析和科学计算领域,NumPy占据了非常重要的地位。NumPy使得Python具备了操作多维数组的功能,而且效率较高。pandas是使用Python进行数据分析必不可少的一个包,它建立在NumPy库之上,为了灵活地操作数据而提供了很多专门的方法,十分方便。由于要做的东西里面需要对数据进行处理和分析,所以便使我开始了NumPy与Pandas的学习之旅。这里我只介绍我学习的一些内容,至于NumPy和Pandas的常用库详解,请参考https://www.cnblogs.com/prpl/p/5537417.html 和官方手册。

一、NumPy基本操作

1、数组的创建

获取数组的方法可以分为直接获取和间接获取:

直接获取可利用NumPy专门提供的函数np.arange和np.linspace实现
 

In : narr=np.arange(0,10,1)

In : narr

out : arange([0,1,2,3,4,5,6,7,8,9])

注意这里的np.array的步长是可以取小数,Python自带的range里面是不允许的。

用np.linspace获取相同的结果
 

In : narr = np.linspace(0,1,10,endpoint=False)

In : narr

Out : array([0\.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9])

这里0、1、10分别代表起始点、终点和要通过分割得到的数据个数。最后的endpoint表示是否包含终点,默认是TRUE,即包含。

间接获取可以通过Python的list、tuple等来获取数组,除此之外,还可以通过array本身构成新的array。

In:import NumPy as np
In:narr = np.array([1,2,3])
In:narr
out:array([1,2,3])
In:narr = np.array((1,2,3))
In:narr
Out:array([1,2,3])
In:narr=np.array([[1,2,3],[4,5,6]])
In:narr
Out:
array([[1,2,3]
       [4,5,6]])
In:narr=np.array([(1,2,3),(4,5,6)])
In:narr
Out:
array([[1,2,3]
       [4,5,6]])
In:narr=np.array(((1,2,3),(4,5,6)))
In:narr
Out:
array([[1,2,3]
       [4,5,6])
In:narr1=np.array([1,2,3])
In:narr2=np.array([4,5,6])
In:narr=np.array([narr1,narr2])
In:narr
Out:
array([[1,2,3]
      [4,5,6]])

此外NumPy还有一些内置建立特殊数的函数:

np.zeros((2,3))

np.ones((2,3))

np.eye(3)

2、数组属性

常用属性shape、dtype(显示数据类型和定义数组类型),通过print(np.sctypeDict)可以查看

np.ones((3,5)).shape #描述数组的形状

np.ones((3,5)).reshape #来改变数组的形状

3、数组的操作

In:na=np.arange(10)
In:na
Out:array([0,1,2,3,4,5,6,7,8,9])
In:na[0]
#[]内的内容为0,表示取出第一个元素,视为单个元素的索引
Out:0
In:na[[0,1,2,3,4]]
#[]内的内容为[0,1,2,3,4]表示取出第1,2,3,4,5个元素,并将结果一起返回(array形式),视为多个元素的索引。
Out:array([0,1,2,3,4])
In:na[1:10]
Out:array([1,2,3,4,5,6,7,8,9])
In:na[1:10:2]
Out:array([1,3,5,7,9])

二、pandas

pandas大致分为三种数据结构:一维的Series、二维的DataFrame,以及三维的Panel。目前我学习的主要是Series和DataFrame在数据的选择、过滤等操作。除此之外,Pandas还可以和seaborn和+atplotlib配合实现强大的可视化功能。

1、Series

 Series 是一个类数组的数据结构,同时带有标签(lable)或者说索引(index)。

1.1 下边生成一个最简单的Series对象,因为没有给Series指定索引,所以此时会使用默认索引(从0到N-1)。

# 引入Series和DataFrame
In [16]: from pandas import Series,DataFrame
In [17]: import pandas as pd

In [18]: ser1 = Series([1,2,3,4])

In [19]: ser1
Out[19]: 
0    1
1    2
2    3
3    4
dtype: int64

1.2 当要生成一个指定索引的Series 时候,可以这样: 

# 给index指定一个list
In [23]: ser2 = Series(range(4),index = ["a","b","c","d"])

In [24]: ser2
Out[24]: 
a    0
b    1
c    2
d    3
dtype: int64

1.3 也可以通过字典来创建Series对象

In [45]: sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}

In [46]: ser3 = Series(sdata)
# 可以发现,用字典创建的Series是按index有序的
In [47]: ser3
Out[47]: 
Ohio      35000
Oregon    16000
Texas     71000
Utah       5000
dtype: int64

在用字典生成Series的时候,也可以指定索引,当索引中值对应的字典中的值不存在的时候,则此索引的值标记为Missing,NA,并且可以通过函数(pandas.isnull,pandas.notnull)来确定哪些索引对应的值是没有的。

In [48]: states = ['California', 'Ohio', 'Oregon', 'Texas']

In [49]: ser3 = Series(sdata,index = states)

In [50]: ser3
Out[50]: 
California        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
dtype: float64
# 判断哪些值为空
In [51]: pd.isnull(ser3)
Out[51]: 
California     True
Ohio          False
Oregon        False
Texas         False
dtype: bool

In [52]: pd.notnull(ser3)
Out[52]: 
California    False
Ohio           True
Oregon         True
Texas          True
dtype: bool

 1.4 访问Series中的元素和索引:

# 访问索引为"a"的元素
In [25]: ser2["a"]
Out[25]: 0
# 访问索引为"a","c"的元素
In [26]: ser2[["a","c"]]
Out[26]: 
a    0
c    2
dtype: int64
# 获取所有的值
In [27]: ser2.values
Out[27]: array([0, 1, 2, 3])
# 获取所有的索引
In [28]: ser2.index
Out[28]: Index([u'a', u'b', u'c', u'd'], dtype='object')

2.  DataFrame 对象的构建 

DataFrame 类型类似于数据库表结构的数据结构,其含有行索引和列索引,可以将DataFrame 想成是由相同索引的Series组成的Dict类型。在其底层是通过二维以及一维的数据块实现。

2.1 用包含等长的列表或者是NumPy数组的字典创建DataFrame对象

In [68]: import pandas as pd

In [69]: from pandas import Series,DataFrame

# 建立包含等长列表的字典类型
In [70]:  data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],'year': [2000, 2001, 20
    ...: 02, 2001, 2002],'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}
In [71]: data
Out[71]: 
{'pop': [1.5, 1.7, 3.6, 2.4, 2.9],
 'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],
 'year': [2000, 2001, 2002, 2001, 2002]}
# 建立DataFrame对象
In [72]: frame1 = DataFrame(data)
# 红色部分为自动生成的索引
In [73]: frame1
Out[73]: 
   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

在建立过程中可以指点列的顺序:

In [74]: frame1 = DataFrame(data,columns=['year', 'state', 'pop'])

In [75]: frame1
Out[75]: 
   year   state  pop
0  2000    Ohio  1.5
1  2001    Ohio  1.7
2  2002    Ohio  3.6
3  2001  Nevada  2.4
4  2002  Nevada  2.9

和Series一样,DataFrame也是可以指定索引内容:

In [76]: ind = ['one', 'two', 'three', 'four', 'five']
In [77]: frame1 = DataFrame(data,index = ind)

In [78]: frame1
Out[78]: 
       pop   state  year
one    1.5    Ohio  2000
two    1.7    Ohio  2001
three  3.6    Ohio  2002
four   2.4  Nevada  2001
five   2.9  Nevada  2002

2.2.  用由字典类型组成的嵌套字典类型来生成DataFrame对象

  当由嵌套的字典类型生成DataFrame的时候,外部的字典索引会成为列名,内部的字典索引会成为行名。生成的DataFrame会根据行索引排序

In [84]: pop = {'Nevada': {2001: 2.4, 2002: 2.9},'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}

In [85]: frame3 = DataFrame(pop)

In [86]: frame3
Out[86]: 
      Nevada  Ohio
2000     NaN   1.5
2001     2.4   1.7
2002     2.9   3.6

 除了使用默认的按照行索引排序之外,还可以指定行序列:

In [95]: frame3 = DataFrame(pop,[2002,2001,2000])

In [96]: frame3
Out[96]: 
      Nevada  Ohio
2002     2.9   3.6
2001     2.4   1.7
2000     NaN   1.5

 

你可能感兴趣的:(Python学习)