前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅谈NumPy和Pandas库(一)

浅谈NumPy和Pandas库(一)

作者头像
IT派
发布2018-03-28 18:51:01
2.3K0
发布2018-03-28 18:51:01
举报
文章被收录于专栏:IT派IT派

机器学习、深度学习在用Python时,我们要用到NumPy和Pandas库。今天我和大家一起来对这两个库的最最基本语句进行学习。希望能起到抛砖引玉的作用,目前处于入门阶段,而且第一次发文,哪里出现错误望大家批评指正。

NumPy是Python的数值计算拓展,它能够帮你处理大量数值数据以及储存大型数据集和提取其中的信息。本文将聊一下NumPy和panda.DataFrames最基础的一些知识,前者能帮助你处理大量数值数据,后者帮你存储大型数据集以及从数据集中提取出来的信息。

下面附上他们的官方文档方便大家查看以及深一步学习:

NumPy库档:https://docs.scipy.org/doc/numpydev/user/quickstart.html

Pandas库文档:http://pandas.pydata.org/pandas-docs/version/0.19.2/

下面我们先聊一下NumPy,它内置了进行数据分析时,所要执行的大量基础任务所需的函数。如计算任意数组的平均数(mean)、中位数(median)、标准差(standard deviation)。

例如:对1至5之间的所有整数数组命名为numbers。(注:从技术层面讲,NumPy数组与Pyhton列表不同,但像这样在Pyhton列表上执行这些操作,会1以Pyhton数组的形式在幕后转换该列表,所以这就不需要我们费神啦!)

下面在Python上利用NumPy库来计算numbers的平均数、中位数和标准差了。(import numpy要确保安装了numpy库哦!这里我个人觉得在pycharm社区版这个Python的IDE上选择Pycharm Community Edition → Perferences → ProjectInterpreter点'+'号搜索numpy库直接进行下载安装即可,其他库同理)

代码语言:javascript
复制
import numpy
numbers = [1, 2, 3, 4, 5]
numpy.mean(numbers)
#3.0
numpy.median(numbers)
#3.0
numpy.std(numbers)
#1.4142135623730951 

另一个numpy非常实用的方法:numpy.dot函数可以计算出两个向量之间的点积。

代码语言:javascript
复制
import numpy
a = [1, 2, 3, 4, 5]
b = [2, 3, 4, 5, 6]
numpy.dot(a,b)

好了,现在我们对操作数据有了一定的了解了。下面我们接着聊如何使用Pandas存储并引用这些数据。

Pandas中的数据经常包括在名为数据框架(data frame)的结构中,数据框架是已经标记的二维数据结构,可以让你根据需要选择不同类型的列,类型有字符串(string)、整数(int)、浮点型(float)或布尔值(Booles)。比如一个数据结构由四个人的姓名(name)、年龄(age)、BMI、是否健康(healthy?)构成(其中还含有非数字NaN条目)。你可以把数据框架看做Excel表格。

首先,我们看一下如何创建数据框架:

代码语言:javascript
复制
#Pandas创建数据框架(dataframe)
from pandas import DataFrame, Series

#首先创建一个名为d的Python词典
#'name'、'age'等这样的名字为key(键),Series是Python序列:里面为对应的值,index为目标索引组
#对于非数值组NaN,空出来就好,在索引组也空出来就好。
d = {
    'name':Series(['oliver', 'james', 'jack', 'frank'], index=['a','b','c','d']),\
    'age': Series([24, 22, 36, 43], index=['a','b','c','d']),\
     'BMI':Series([30.1, 23.0, 19.8], index= ['a', 'b', 'd']),\
    'healthy?':Series([False, True, False, True], index=['a','b','c','d'])
    }
#字典创建好以后,将其做为参数传递至DataFrame函数,创建实际的数据框架
df = DataFrame(d)
print df
# answer
#     BMI  age  healthy?    name
# a  30.1   24     False  oliver
# b  23.0   22      True   james
# c   NaN   36     False    jack
# d  19.8   43      True   frank 
代码语言:javascript
复制
#结果不是相应的顺序,若想得到想要的顺序,需要对df按想要的顺序重新排序
df.reindex(columns=['name', 'age', 'BMI', 'healthy?'])
##answer
#      name  age   BMI  healthy?
# a  oliver   24  30.1     False
# b   james   22  23.0      True
# c    jack   36   NaN     False
# d   frank   43  19.8      True

弄明白了如何创建数据框架,接下来看一下,如何访问数据吧。

代码语言:javascript
复制
df['name']
# a    oliver
# b     james
# c      jack
# d     frank
# Name: name, dtype: object

df[['name', 'age']]
#      name  age
# a  oliver   24
# b   james   22
# c    jack   36
# d   frank   43

若只需要oliver对应的行,该行的索引是a

代码语言:javascript
复制
df.loc['a']
#answer
# BMI           30.1
# age             24
# healthy?     False
# name        oliver
# Name: a, dtype: object 

若要选择年龄大于等于30的行

代码语言:javascript
复制
df[df['age'] >= 30]
#answer
#     BMI  age  healthy?   name
# c   NaN   36     False   jack
# d  19.8   43      True  frank
代码语言:javascript
复制
若只需要上面c、d行的健康情况
df[df['age'] >= 30]['healthy?']
df['healthy?'][df['age'] >= 30]
##answer
# c    False
# d     True
# Name: healthy?, dtype: bool 

Pandas还可以让我们以向量化的形式逐项在数据框架上进行操作。那什么是以向量化形式在数据结构上进行操作呢?下面假设我们有以下数据框架,由2列分别是’one’、’two’和四行’a’、’b’、’c’、’d’。值均为整数。

代码语言:javascript
复制
d = {
    'one': Series([1, 2, 3], index=['a', 'b', 'c']),
    'two': Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
}
df = DataFrame(d)
print df
#    one  two
# a  1.0    1
# b  2.0    2
# c  3.0    3
# d  NaN    4

我们可以调用适用的数据框架向我们提供的参数总和和任意函数。在本例中,我们重温一下之前numpy中提到的求平均数。numpy.mean对每个自成一列的向量求平均数,这本身就是一个新的数据结构。另外还有一些操作不能通过这种方式向量化,例如提取numpy数组作为输入数据,然后返回其他数组或值。

代码语言:javascript
复制
import numpy
#numpy.mean对每一列求平均值
df.apply(numpy.mean)
# one    2.0
# two    2.5
# dtype: float64

本例中,我们还可以在特定列上调用映射或多整个数据框架应用映射,这些方法将接受传入一个值然后返回一个值的函数。

代码语言:javascript
复制
#判断'one'列的值是否大于等于1
df['one'].map(lambda x: x >=1)
# a     True
# b     True
# c     True
# d    False
# Name: one, dtype: bool

#判断数据框架中的所有值是否大于等于1
df.applymap(lambda x: x >= 1)
#      one   two
# a   True  True
# b   True  True
# c   True  True
# d  False  True

好了,以上就是文章的内容,强烈建议大家能够亲手实践一下,毕竟纸上得来终觉浅,绝知此事要躬行。由于我水平有限,所以接下来几天给大家转几篇大神写的关于Pandas和NumPy的很好的文章,大家可以一起学习一下哈!最后感谢大家的阅读。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT派 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档