python学习教程之Numpy和Pandas的使用

前言

本文主要给大家介绍了关于python中Numpy和Pandas使用的相关资料,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

它们是什么?

NumPy是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

Pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

List、Numpy与Pandas

Numpy与List

相同之处:

  • 都可以用下标访问元素,例如a[0]
  • 都可以切片访问,例如a[1:3]
  • 都可以使用for循环进行遍历

不同之处:

  • Numpy之中每个元素类型必须相同;而List中可以混合多个类型元素
  • Numpy使用更方便,封装了许多函数,例如mean、std、sum、min、max等
  • Numpy可以是多维数组
  • Numpy用C实现,操作起来速度更快

Pandas与Numpy

相同之处:

  • 访问元素一样,可以使用下标,也可以使用切片访问
  • 可以使用For循环遍历
  • 有很多方便的函数,例如mean、std、sum、min、max等
  • 可以进行向量运算
  • 用C实现,速度更快

不同之处:Pandas拥有Numpy一些没有的方法,例如describe函数。其主要区别是:Numpy就像增强版的List,而Pandas就像列表和字典的合集,Pandas有索引。

Numpy使用

1、基本操作

import numpy as np
#创建Numpy
p1 = np.array([1, 2, 3])
print p1
print p1.dtype
[1 2 3]
int64
#求平均值
print p1.mean()
2.0
#求标准差
print p1.std()
0.816496580928
#求和、求最大值、求最小值
print p1.sum()
print p1.max()
print p1.min()
6
3
1
#求最大值所在位置
print p1.argmax()
2

2、向量运算

p1 = np.array([1, 2, 3])
p2 = np.array([2, 5, 7])
#向量相加,各个元素相加
print p1 + p2
[ 3 7 10]
#向量乘以1个常数
print p1 * 2
[2 4 6]
#向量相减
print p1 - p2
[-1 -3 -4]
#向量相乘,各个元素之间做运算
print p1 * p2
[ 2 10 21]
#向量与一个常数比较
print p1 > 2
[False False True]

3、索引数组

首先,看下面一幅图,理解下

然后,咱们用代码实现看下

a = np.array([1, 2, 3, 4, 5])
print a
[1 2 3 4 5]
b = a > 2
print b
[False False True True True]
print a[b]
[3 4 5]

a[b]中,只会保留a中所对应的b位置为True的元素

4、原地与非原地

咱们先来看一组运算:

a = np.array([1, 2, 3, 4])
b = a
a += np.array([1, 1, 1, 1])
print b
[2 3 4 5]
a = np.array([1, 2, 3, 4])
b = a
a = a + np.array([1, 1, 1, 1])
print b
[1 2 3 4]

从上面结果可以看出来,+=改变了原来数组,而+没有。这是因为:

  • +=:它是原地计算,不会创建一个新的数组,在原始数组中更改元素
  • +:它是非原地计算,会创建一个新的数组,不会修改原始数组中的元素

5、Numpy中的切片与List的切片

l1 = [1, 2, 3, 5]
l2 = l1[0:2]
l2[0] = 5
print l2
print l1
[5, 2]
[1, 2, 3, 5]
p1 = np.array([1, 2, 3, 5])
p2 = p1[0:2]
p2[0] = 5
print p1
print p2
[5 2 3 5]
[5 2]

从上可知,List中改变切片中的元素,不会影响原来的数组;而Numpy改变切片中的元素,原来的数组也跟着变了。这是因为:Numpy的切片编程不会创建一个新数组出来,当修改对应的切片也会更改原始的数组数据。这样的机制,可以让Numpy比原生数组操作更快,但编程时需要注意。

6、二维数组的操作

p1 = np.array([[1, 2, 3], [7, 8, 9], [2, 4, 5]])
#获取其中一维数组
print p1[0]
[1 2 3]
#获取其中一个元素,注意它可以是p1[0, 1],也可以p1[0][1]
print p1[0, 1]
print p1[0][1]
2
2
#求和是求所有元素的和
print p1.sum()
41
[10 14 17]

但,当设置axis参数时,当设置为0时,是计算每一列的结果,然后返回一个一维数组;若是设置为1时,则是计算每一行的结果,然后返回一维数组。对于二维数组,Numpy中很多函数都可以设置axis参数。

#获取每一列的结果
print p1.sum(axis=0)
[10 14 17]
#获取每一行的结果
print p1.sum(axis=1)
[ 6 24 11]
#mean函数也可以设置axis
print p1.mean(axis=0)
[ 3.33333333 4.66666667 5.66666667]

Pandas使用

Pandas有两种结构,分别是Series和DataFrame。其中Series拥有Numpy的所有功能,可以认为是简单的一维数组;而DataFrame是将多个Series按列合并而成的二维数据结构,每一列单独取出来是一个Series。

咱们主要梳理下Numpy没有的功能:

1、简单基本使用

import pandas as pd
pd1 = pd.Series([1, 2, 3])
print pd1
0 1
1 2
2 3
dtype: int64
#也可以求和和标准偏差
print pd1.sum()
print pd1.std()
6
1.0

2、索引

(1)Series中的索引

p1 = pd.Series(
 [1, 2, 3],
 index = ['a', 'b', 'c']
)
print p1
a 1
b 2
c 3
dtype: int64
print p1['a']

(2)DataFrame数组

p1 = pd.DataFrame({
 'name': ['Jack', 'Lucy', 'Coke'],
 'age': [18, 19, 21]
})
print p1
 age name
0 18 Jack
1 19 Lucy
2 21 Coke
#获取name一列
print p1['name']
0 Jack
1 Lucy
2 Coke
Name: name, dtype: object
#获取姓名的第一个
print p1['name'][0]
Jack
#使用p1[0]不能获取第一行,但是可以使用iloc
print p1.iloc[0]
age 18
name Jack
Name: 0, dtype: object

总结:

  • 获取一列使用p1[‘name']这种索引
  • 获取一行使用p1.iloc[0]

3、apply使用

apply可以操作Pandas里面的元素,当库里面没用对应的方法时,可以通过apply来进行封装

def func(value):
 return value * 3
pd1 = pd.Series([1, 2, 5])
print pd1.apply(func)
0  3
1  6
2 15
dtype: int64

同样可以在DataFrame上使用:

pd2 = pd.DataFrame({
 'name': ['Jack', 'Lucy', 'Coke'],
 'age': [18, 19, 21]
})
print pd2.apply(func)
 age   name
0 54 JackJackJack
1 57 LucyLucyLucy
2 63 CokeCokeCoke

4、axis参数

Pandas设置axis时,与Numpy有点区别:

  • 当设置axis为'columns'时,是计算每一行的值
  • 当设置axis为'index'时,是计算每一列的值
pd2 = pd.DataFrame({
 'weight': [120, 130, 150],
 'age': [18, 19, 21]
})
0 138
1 149
2 171
dtype: int64
#计算每一行的值
print pd2.sum(axis='columns')
0 138
1 149
2 171
dtype: int64
#计算每一列的值
print pd2.sum(axis='index')
age  58
weight 400
dtype: int64

5、分组

pd2 = pd.DataFrame({
 'name': ['Jack', 'Lucy', 'Coke', 'Pol', 'Tude'],
 'age': [18, 19, 21, 21, 19]
})
#以年龄分组
print pd2.groupby('age').groups
{18: Int64Index([0], dtype='int64'), 19: Int64Index([1, 4], dtype='int64'), 21: Int64Index([2, 3], dtype='int64')}

6、向量运算

需要注意的是,索引数组相加时,对应的索引相加

pd1 = pd.Series(
 [1, 2, 3],
 index = ['a', 'b', 'c']
)
pd2 = pd.Series(
 [1, 2, 3],
 index = ['a', 'c', 'd']
)
print pd1 + pd2
a 2.0
b NaN
c 5.0
d NaN
dtype: float64

出现了NAN值,如果我们期望NAN不出现,如何处理?使用add函数,并设置fill_value参数

print pd1.add(pd2, fill_value=0)
a 2.0
b 2.0
c 5.0
d 3.0
dtype: float64

同样,它可以应用在Pandas的dataFrame中,只是需要注意列与行都要对应起来。

总结

这一周学习了优达学城上分析基础的课程,使用的是Numpy与Pandas。对于Numpy,以前在Tensorflow中用过,但是很不明白,这次学习之后,才知道那么简单,算是有一定的收获。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

参考

Pandas 使用指南(上) 基本数据结构

(0)

相关推荐

  • Python NumPy库安装使用笔记

    1. NumPy安装 使用pip包管理工具进行安装 复制代码 代码如下: $ sudo pip install numpy 使用pip包管理工具安装ipython(交互式shell工具) 复制代码 代码如下: $ sudo pip instlal ipython $ ipython --pylab  #pylab模式下, 会自动导入SciPy, NumPy, Matplotlib模块 2. NumPy基础 2.1. NumPy数组对象 具体解释可以看每一行代码后的解释和输出 复制代码 代码如下:

  • python中numpy包使用教程之数组和相关操作详解

    前言 大家应该都有所了解,下面就简单介绍下Numpy,NumPy(Numerical Python)是一个用于科学计算第三方的Python包. NumPy提供了许多高级的数值编程工具,如:矩阵数据类型.矢量处理,以及精密的运算库.专为进行严格的数字处理而产生.下面本文将详细介绍关于python中numpy包使用教程之数组和相关操作的相关内容,下面话不多说,来一起看看详细的介绍: 一.数组简介 Numpy中,最重要的数据结构是:多维数组类型(numpy.ndarray) ndarray由两部分组成

  • Python中优化NumPy包使用性能的教程

    NumPy是Python中众多科学软件包的基础.它提供了一个特殊的数据类型ndarray,其在向量计算上做了优化.这个对象是科学数值计算中大多数算法的核心. 相比于原生的Python,利用NumPy数组可以获得显著的性能加速,尤其是当你的计算遵循单指令多数据流(SIMD)范式时.然而,利用NumPy也有可能有意无意地写出未优化的代码. 在这篇文章中,我们将看到一些技巧,这些技巧可以帮助你编写高效的NumPy代码.我们首先看一下如何避免不必要的数组拷贝,以节省时间和内存.因此,我们将需要深入Num

  • Windows下Python使用Pandas模块操作Excel文件的教程

    安装Python环境 ANACONDA是一个Python的发行版本,包含了400多个Python最常用的库,其中就包括了数据分析中需要经常使用到的Numpy和Pandas等.更重要的是,不论在哪个平台上,都可以一键安装,自动配置好环境,不需要用户任何的额外操作,非常方便.因此,安装Python环境就只需要到ANACONDA网站上下载安装文件,双击安装即可. ANACONDA官方下载地址:https://www.continuum.io/downloads 安装完成之后,使用windows + r

  • python学习教程之Numpy和Pandas的使用

    前言 本文主要给大家介绍了关于python中Numpy和Pandas使用的相关资料,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 它们是什么? NumPy是Python语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. Pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具.Pandas提供了大量能使我们快速便捷地处理数据

  • Python 学习教程之networkx

    networkx是Python的一个包,用于构建和操作复杂的图结构,提供分析图的算法.图是由顶点.边和可选的属性构成的数据结构,顶点表示数据,边是由两个顶点唯一确定的,表示两个顶点之间的关系.顶点和边也可以拥有更多的属性,以存储更多的信息. 对于networkx创建的无向图,允许一条边的两个顶点是相同的,即允许出现自循环,但是不允许两个顶点之间存在多条边,即出现平行边.边和顶点都可以有自定义的属性,属性称作边和顶点的数据,每一个属性都是一个Key:Value对. 一,创建图 在创建图之前,需要导

  • jQuery插件学习教程之SlidesJs轮播+Validation验证

    SlidesJs(轮播支持触屏)--官网(http://slidesjs.com) 1.简介 SlidesJs是基于Jquery(1.7.1+)的响应幻灯片插件.支持键盘,触摸,css3转换. 2.代码 <!doctype html> <head> <style> /* Prevents slides from flashing */ #slides { display:none; } </style> <script src="http:/

  • PHP内核学习教程之php opcode内核实现

    opcode是计算机指令中的一部分,用于指定要执行的操作, 指令的格式和规范由处理器的指令规范指定. 除了指令本身以外通常还有指令所需要的操作数,可能有的指令不需要显式的操作数. 这些操作数可能是寄存器中的值,堆栈中的值,某块内存的值或者IO端口中的值等等. 通常opcode还有另一种称谓:字节码(byte codes). 例如Java虚拟机(JVM),.NET的通用中间语言(CIL: Common Intermeditate Language)等等. 1. Opcode简介 opcode是计算

  • Angular4学习教程之DOM属性绑定详解

    前言 DOM 元素触发的一些事件通过 DOM 层级结构传播,事件首先由最内层的元素开始,然后传播到外部元素,直到它们到根元素,这种传播过程称为事件冒泡.本文主要介绍了关于Angular4 DOM属性绑定的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 简介 使用插值表达式将一个表达式的值显示在模版上 <img src="{{imgUrl}}" alt=""> <h1>{{productTitle}}</h1&

  • Angular4学习教程之HTML属性绑定的方法

    前言 本文主要给大家介绍了关于Angular4 HTML属性绑定的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 简介 基本HTML属性 <td [attr.colspan]="tableColspan"></td> Css 类绑定 <!-- 第一种情况 class 类全部替换 --> <div [class]="divClass">CSS 类绑定,[class] 全部替换的例子</d

  • WebGL学习教程之Three.js学习笔记(第一篇)

    webgl介绍 WebGL是一种3D绘图协议,它把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供硬件3D加速渲染. WebGL技术标准免去了开发网页专用渲染插件的麻烦,可被用于创建具有复杂3D结构的网站页面,甚至可以用来设计3D网页游戏. 原生的WebGl比较复杂,主要通过对顶点着色器和片元着色器的操作,来实现渲染,但实现起来比较复杂,需要一定的数学基础,但更多的是需要学习

  • Python基础教程之if判断,while循环,循环嵌套

    if判断 判断的定义 如果条件满足,就做一件事:条件不满足,就做另一件事:  判断语句又被称为分支语句,有判断,才有分支: if判断语句基本语法 if语句格式: if 判断的条件:     条件成立后做的事     ... ... 代码缩进为一个tab键,或者四个空格,官方建议使用空格:但应注意,在python开发中,tab和空格不能混用! 判断年龄示例: # 判断是否成年,成年则可以进网吧 age = 19 if age>=18: print("你满了18岁,可以进网吧") i

  • python 安装教程之Pycharm安装及配置字体主题,换行,自动更新

    下载 下面提供两种下载地址,官网地址一般为最新的,网盘地址会定期更新,但是不保证一定是最新的 官网下载地址:https://www.jetbrains.com/pycharm/download/download-thanks.html?platform=windows 百度网盘地址: https://pan.baidu.com/s/1EhtY5PD3XagJ-nTw8IX8Vw 提取码: z8ej 安装 1.双击 exe 安装 2.自定义安装路径 2.配置 3.添加到开始菜单里 可以选择放在其他

  • ES6学习教程之Promise用法详解

    前言 promise用了这么多年了,一直也没有系统整理过.今天整理整理promise的相关东西,感兴趣的可以一起看一看.我尽量用更容易理解的语言来剖析一下promise 我准备分两篇文章来说明一下promise 一篇来理解和使用promise(本篇) 另一篇来从promise使用功能的角度来剖析下promise的源码(下一篇) 1.什么是Promise 我的理解是:实现让我们用同步的方式去写异步代码的一种技术.是异步解决方案的一种. 他可以将多个异步操作进行队列化,让它们可以按照我们的想法去顺序

随机推荐