国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python學習教程之Numpy和Pandas的使用

2020-01-04 16:43:44
字體:
來源:轉載
供稿:網友

前言

本文主要給大家介紹了關于python/266925.html">python/121127.html">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#創建Numpyp1 = np.array([1, 2, 3])print p1print 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()
631
#求最大值所在位置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、索引數組

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

python,numpy,pandas,numpy和pandas,使用

然后,咱們用代碼實現看下

a = np.array([1, 2, 3, 4, 5])print a
[1 2 3 4 5]
b = a > 2print 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 = aa += np.array([1, 1, 1, 1])print b
[2 3 4 5]
a = np.array([1, 2, 3, 4])b = aa = 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] = 5print l2print l1
[5, 2][1, 2, 3, 5]
p1 = np.array([1, 2, 3, 5])p2 = p1[0:2]p2[0] = 5print p1print 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]
22
#求和是求所有元素的和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函數也可以設置axisprint p1.mean(axis=0)
[ 3.33333333 4.66666667 5.66666667]

Pandas使用

Pandas有兩種結構,分別是Series和DataFrame。其中Series擁有Numpy的所有功能,可以認為是簡單的一維數組;而DataFrame是將多個Series按列合并而成的二維數據結構,每一列單獨取出來是一個Series。

咱們主要梳理下Numpy沒有的功能:

1、簡單基本使用

import pandas as pdpd1 = pd.Series([1, 2, 3])print pd1
0 11 22 3dtype: int64
#也可以求和和標準偏差print pd1.sum()print pd1.std()
61.0

2、索引

(1)Series中的索引

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

(2)DataFrame數組

p1 = pd.DataFrame({ 'name': ['Jack', 'Lucy', 'Coke'], 'age': [18, 19, 21]})print p1
 age name0 18 Jack1 19 Lucy2 21 Coke
#獲取name一列print p1['name']
0 Jack1 Lucy2 CokeName: name, dtype: object
#獲取姓名的第一個print p1['name'][0]
Jack
#使用p1[0]不能獲取第一行,但是可以使用ilocprint p1.iloc[0]
age 18name JackName: 0, dtype: object

總結:

  • 獲取一列使用p1[‘name']這種索引
  • 獲取一行使用p1.iloc[0]

3、apply使用

apply可以操作Pandas里面的元素,當庫里面沒用對應的方法時,可以通過apply來進行封裝

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

同樣可以在DataFrame上使用:

pd2 = pd.DataFrame({ 'name': ['Jack', 'Lucy', 'Coke'], 'age': [18, 19, 21]})print pd2.apply(func)
 age   name0 54 JackJackJack1 57 LucyLucyLucy2 63 CokeCokeCoke

4、axis參數

Pandas設置axis時,與Numpy有點區別:

  • 當設置axis為'columns'時,是計算每一行的值
  • 當設置axis為'index'時,是計算每一列的值
pd2 = pd.DataFrame({ 'weight': [120, 130, 150], 'age': [18, 19, 21]})
0 1381 1492 171dtype: int64
#計算每一行的值print pd2.sum(axis='columns')
0 1381 1492 171dtype: int64
#計算每一列的值print pd2.sum(axis='index')
age  58weight 400dtype: 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.0b NaNc 5.0d NaNdtype: float64

出現了NAN值,如果我們期望NAN不出現,如何處理?使用add函數,并設置fill_value參數

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

同樣,它可以應用在Pandas的dataFrame中,只是需要注意列與行都要對應起來。

總結

這一周學習了優達學城上分析基礎的課程,使用的是Numpy與Pandas。對于Numpy,以前在Tensorflow中用過,但是很不明白,這次學習之后,才知道那么簡單,算是有一定的收獲。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乐至县| 北票市| 贵溪市| 会同县| 留坝县| 丹凤县| 永福县| 陵川县| 澄江县| 哈密市| 梨树县| 唐山市| 藁城市| 定兴县| 陕西省| 黄梅县| 南宁市| 马山县| 池州市| 集安市| 色达县| 淮北市| 六枝特区| 博罗县| 泽普县| 肥西县| 正安县| 陇南市| 嘉荫县| 东丰县| 涞水县| 黎平县| 永仁县| 津南区| 东乡族自治县| 同心县| 大厂| 临沭县| 靖安县| 东莞市| 邛崃市|