pandas numpy python_Python之Numpy与Pandas学习笔记

在数据分析领域中,Numpy、Pandas与matplotlibz这三个包用的比较多。其中,numpy通常用于数学计算,比如线性代数中的矩阵运算,在机器学习中非常有用。Pandas是基于numpy的数据分析工具,该工具是为了解决数据分析任务而创建的,它提供的DataFrame数据框可以方便地对表格数据进行分析。而matplotlibz是图形绘制库,专门用于数据分析结果的可视化。今天,主要学习Numpy与Pandas,matplotlibz在学习数据可视化时再总结。

一、Numpy基础:数组和矢量计算

1、Numpy的ndarray:一种多维数组对象

ndarray是一个通用的同构数据多维容器,即其中的所有元素必须是相同类型的。每个数组都有一个shape和一个dtype。

我们先来看Numpy一维数组(array):

1)定义一维数组array

创建数组最简单的办法就是使用array函数。

2)查询数组中的元素

3)查看数据结构和类型

此外,还可以用astype()进行数据类型转换。

Numpy二维数据结构

1)定义二维数组

2)获取元素

3)数轴参数axis

当数组不再是一维时,对数组进行操作时,需要指定为行或列,即axis=1或axis=0

Numpy数组的切片与索引,跟python中列表的功能差不多,但与列表不同的是它具有统计功能和向量化计算。

4)计算统计运算数组运算

数组与数的运算

数组间也支持加减乘除运算,但基本用不到;矩阵运算 np.dot()

2、常用函数

reshape

#生成从 0-14 的 15 个数字,使用 reshape(3,5) 将其构造成一个三行五列的 array。

arr = np.arange(15).reshape(3, 5)

arr

array([[ 0, 1, 2, 3, 4],

[ 5, 6, 7, 8, 9],

[10, 11, 12, 13, 14]])

zeros

类似地,还有ones,ones_like,zeros_like

#根据指定的形状和dtype创建全0数组

np.zeros ((3,4))

array([[ 0., 0., 0., 0.],

[ 0., 0., 0., 0.],

[ 0., 0., 0., 0.]])

arange

是python内置函数range的数组版

np.arange(0,10,2)

array([0, 2, 4, 6, 8])

random

生成指定结构的随机数,可以用于生成随机权重

np.random.random((2,3))

array([[ 0.2534773 , 0.81329347, 0.12915192],

[ 0.0753843 , 0.36546139, 0.784775 ]])

二、pandas

1、数据结构

pandas有三种数据结构:Series、DataFrame以及Panel,我们主要学习前两种数据结构。Series

Series是一种类似于一维数组的对象,他由一组数据(各种Numpy数据类型)和与数据相关的标签(即索引)构成。Series的性质和Python中原生的dict差不多,一个key对应一个vaule,而且key必须是唯一的。

DataFrame

DataFrame是一个二维的表结构,可以存储许多种不同的数据类型,并且每一个坐标轴都有自己的标签。

Dataframe数据框的优点在于:

数据框中的每一列的数据类型可以不一样;拥有pandas一维数组series索引的功能,二维表的行和列都有索引值,方便处理表格数据。

DataFrame数据框的创建:

2、胖哒黑魔法—索引

1)建立索引

a.新建数据框时建立索引

如上图所示,所有的数据框默认 都已经拥有流水号格式的索引,因此这里的“建立”索引指的是自定义索引。此时,索引为a,b,c。

b.读入数据时建立索引:index_col

数据列直接提供所引值,因此指明相应的数据列即可。

c.制定某列为索引列:set_index()

df.set_index(

keys:被指定为索引的列名,复合索引用list格式

drop=True:建立索引后是否删除该列

append=False:是否在原索引基础上添加索引,默认是直接替换

inplace=False:是否直接修改原数据框 )

也可将索引还原回变量列:reset_index()

2)修改索引

a.修改索引名称 :本质上和修改列名一样 index.names=[]

b.修改索引值:这里修改的本质是全部替换,索引值是无法直接修改的

import pandas as pd

sales=pd.DataFrame(

{

'购药时间':['2018-01-01 星期五','2018-01-02 星期六','2018-01-06 星期三'],

'社保卡号':['001616528','001616528','0012602828'],

'商品编码':[236701,236701,236701],

'商品名称':['强力VC银翘片','清热解毒口服液','感康'],

'销售数量':[6,1,2],

'应收金额':[82.8,28,16.8],

'实收金额':[69,24.64,15]

},

index=['a','b','c'])

sales.index[1]='d' #报错,Index does not support mutable operations

此时,全部替换,就不会报错

c.强行更新索引

Pandas提供了reindex方法对Series和DataFrame对象进行重新索引,即利用新索引将Series和DataFrame对象的数据进行重排,并创建一个新的对象。重排时不仅会按照新索引对数据进行排序,还将比对新老索引,对数据进行过滤和填充操作。

3)引用索引数据筛选:iloc与loc

a、iloc,意为inter-location,用于根据位置查询值,即按照行列序号进行检索,可以同时指定行列,指定列时,需要先用“,”表明为列序号。

b、loc属性用于根据索引查询值,即按照所给的索引值筛选。

切片功能:

条件筛选

4)层次化索引

层次化索引是pandas的一个重要的功能,它可以在一个轴上有多个(两个以上)索引,有点类似于Excel中的合并单元格。这就表示着,它能够以低维度形式来表示高维度的数据。

我们看个通过层级索引将DataFrame数据转化为Series数据结构的例子:

层次化索引在数据重塑和分组上扮演着重要的角色,在数据处理中我们再详细学习!

你可能感兴趣的:(pandas,numpy,python)