首頁  >  文章  >  後端開發  >  python之Numpy與Pandas的使用介紹

python之Numpy與Pandas的使用介紹

巴扎黑
巴扎黑原創
2017-09-13 10:04:382663瀏覽

最近要對一系列數據做同比比較,需要用到numpy和pandas來計算,下面這篇文章主要給大家介紹了關於python學習教程之Numpy和Pandas使用的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鏡。

前言

本文主要給大家介紹了關於python中Numpy和Pandas使用的相關資料,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

它們是什麼?

NumPy是Python語言的擴充程式庫。支援高級大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。

Pandas是基於NumPy 的一種工具,該工具是為了解決資料分析任務而創建的。 Pandas 納入了大量函式庫和一些標準的資料模型,提供了有效率地操作大型資料集所需的工具。 Pandas提供了大量能使我們快速且方便地處理資料的函數和方法。

List、Numpy與Pandas

Numpy與List

相同之處:

  • 都可以用下標都可以用下標(例如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()

2、向量運算


6
3
1


ee


#求最大值所在位置
print p1.argmax()


2


p1 = np.array([1, 2, 3])
p2 = np.array([2, 5, 7])


#向量相加,各个元素相加
print p1 + p2

[ 3 7 10]

#向量乘以1个常数
print p1 * 2

3、索引數組


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



[2 4 6]

#向量相减
print p1 - p2

[-1 -3 -4]

#向量相乘,各个元素之间做运算
print p1 * p2

[ 2 10 21]

a[b]中,只會保留一個非原地中所對應的bue

咱們先來看一組運算:


#向量与一个常数比较
print p1 > 2

[False False True]

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

這是因為:

+=:它是原地計算,不會創建一個新的數組,在原始數組中更改元素


+:它是非原地計算,會創建一個新的數組,不會修改原始數組中的元素



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


[1 2 3 4 5]

中的元素,不會影響原來的陣列;而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中用过,但是很不明白,这次学习之后,才知道那么简单,算是有一定的收获。

以上是python之Numpy與Pandas的使用介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn