聚沙成塔--數(shù)據(jù)分析(一)(pandas的Series使用)

版權(quán)聲明:本文為作者原創(chuàng)文章,可以隨意轉(zhuǎn)載,但必須在明確位置標明出處?。?!

從今天開始將進入Python數(shù)據(jù)分析的學(xué)習(xí),最終的目標是向機器學(xué)習(xí)方向靠攏,用到的數(shù)據(jù)將會是金融股票數(shù)據(jù),也順帶學(xué)習(xí)學(xué)習(xí)金融知識,我想不管你是那種類型的人,個人覺得都有必要學(xué)習(xí)和了解金融行業(yè)。

這兩年人工智能、機器學(xué)習(xí)十分火爆,國內(nèi)在這方面的人才缺口也比較大,不管是谷歌的AlphaGo還是,無人駕駛、百度機器人、阿里達摩院的成立,種種跡象都標明人工智能在未來5到10年將會呈現(xiàn)井噴式的發(fā)展,他將會用到醫(yī)療、工業(yè)、農(nóng)業(yè)、交通等等行業(yè),所以我們有必要去學(xué)習(xí)它、了解它、使用它,才能在未來占有一席之地。冰凍三尺非一日之寒,學(xué)習(xí)也一樣,人工智能和機器學(xué)習(xí)的起點都比較高,我們只能一點一點的去理解它、靠近它,就像打怪升級一樣、需要不聽的學(xué)習(xí)技能、買裝備、升級裝備、最終才能去打BOSS。

數(shù)據(jù)分析是我們必須要掌握的技能、Python中的數(shù)據(jù)分析用到的是pandas庫,該庫的核心是numpy, numpy是一個用Python實現(xiàn)的科學(xué)計算包,它包含一個強大的N維數(shù)組對象Array、成熟的函數(shù)庫、實用的線性代數(shù)、傅里葉變換和隨機數(shù)生成函數(shù)。下面就開始正式進入pandas的學(xué)習(xí)。

pandas的數(shù)據(jù)結(jié)構(gòu)

pandas有三種數(shù)據(jù)結(jié)構(gòu)

  • Series:一維數(shù)組,與Numpy中的一維array類似。二者與Python基本的數(shù)據(jù)結(jié)構(gòu)List也很相近,其區(qū)別是:List中的元素可以是不同的數(shù)據(jù)類型,而Array和Series中則只允許存儲相同的數(shù)據(jù)類型,這樣可以更有效的使用內(nèi)存,提高運算效率。
  • DataFrame: 二維的表格型數(shù)據(jù)結(jié)構(gòu)。多個Series結(jié)構(gòu)就組成了DataFrame數(shù)據(jù)結(jié)構(gòu),這里需要特別注意的是DataFrame是按照列來存儲的。
  • Panel: 三維的數(shù)組,可以理解為DataFrame的容器。

Series的一些操作

  • Series定義
    Series(data, index=index),data參數(shù)可以是整形、字符串、dict、ndarray、常量值。index是索引值,如果數(shù)據(jù)類型是ndarray,index的長度需要和data的長度一致,如果index沒有指定,那么索引將會從[0,....., len(data) -1]遞增。
    • ndarray數(shù)據(jù)類型
import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5), index=['a','b','c','d','e'])
print(s)
s =  pd.Series(np.random.randn(5))
print(s)

OUT:
a   -0.620323
b   -0.189133
c    1.677690
d   -1.480348
e   -0.539061
dtype: float64

0    1.748631
1   -0.291825
2    1.002143
3    0.558046
4    1.119569
dtype: float64
  • 字典(dict)類型數(shù)據(jù)
    因為字典是key-value結(jié)構(gòu)存儲的,key相當于字典的索引了,那么在創(chuàng)建Series的時候若是不指定index參數(shù),Series就默認使用字典的key來作為所以,若是指定了則在字典中去關(guān)聯(lián)索引,如下:
import pandas as pd
import numpy as np

data = {'a':10, 'b':20, 'c':30}

s = pd.Series(data)

print(s)

s = pd.Series(data, index=['b', 'c', 'a', 'd'])

print(s)

OUT:
a    10
b    20
c    30
dtype: int64
b    20.0
c    30.0
a    10.0
d     NaN
dtype: float64
  • 常量作為輸入數(shù)據(jù)
    如果是常量作為輸入數(shù)據(jù),常量值將會被重復(fù)index長度個數(shù)
import pandas as pd
import numpy as np

s = pd.Series(5, index=['b', 'c', 'a', 'd'])

print(s)

s = pd.Series(5)

print(s)

OUT:
b    5
c    5
a    5
d    5
dtype: int64
0    5
dtype: int64

切片、索引、dict操作

Series既然是一維數(shù)組類型的數(shù)據(jù)結(jié)構(gòu),那么它支持想數(shù)組那樣去操作它。通過數(shù)組下標索引、切片都可以去操作他,且它的data可以是dict類型的,那么它肯定也就支持字典的索引方式。

import pandas as pd
import numpy as np

s = pd.Series(np.random.randn(5), index=['a','b','c','d','e'])

print(s)

# 下標索引
print('下標索引方式s[0] = : %s' % s[0])

# 字典訪問方式
print('字典訪問方式s[b] = :%s' % s['b'])

# 切片操作
print('切片操作s[2:]\n:%s' % s[2:])
print('a' in s)
print('k' in s)
OUT:
a   -0.799676
b   -1.581704
c   -1.240885
d    0.623757
e   -0.234417
dtype: float64

下標索引方式s[0] = : -0.799676067487
字典訪問方式s[b] = :-1.58170351838
切片操作s[2:]:
c   -1.240885
d    0.623757
e   -0.234417
True
False

Series的算術(shù)操作

有了numpy這個科學(xué)計算包后,對數(shù)組中的算術(shù)操作我們不需要去遍歷每個元素然后對它進行計數(shù)。

  • Series加法運算
import pandas as pd
import numpy as np

s1 = pd.Series(np.random.randn(3), index=['a','b','c'])

s2 = pd.Series(np.random.randn(3), index=['a','b','c'])

s3 = pd.Series(np.random.randn(2), index=['a','b'])

s4 = pd.Series(np.random.randn(2), index=['e','f'])

print(s1)

print(s2)

# 對應(yīng)索引的值相加
print('索引值相同的登結(jié)果:\n%s\n' % (s1 + s2))

print(s1)

print(s3)

# 對應(yīng)索引的值相加
print('索引值部分不相同的登結(jié)果:\n%s\n' % (s1 + s3))

print(s1)

print(s4)
# 對應(yīng)索引的值相加

print('索引值都不相同的登結(jié)果:\n%s\n' % (s1 + s4))

OUT:
a    0.271685
b    0.547691
c   -0.143253
dtype: float64
a   -1.603913
b   -0.464923
c    0.471518
dtype: float64
索引值相同的登結(jié)果:
a   -1.332227
b    0.082768
c    0.328266
dtype: float64

a    0.271685
b    0.547691
c   -0.143253
dtype: float64
a   -0.690966
b    1.131122
dtype: float64
索引值部分不相同的登結(jié)果:
a   -0.419281
b    1.678812
c         NaN
dtype: float64

a    0.271685
b    0.547691
c   -0.143253
dtype: float64
e   -1.898507
f    0.153425
dtype: float64
索引值都不相同的登結(jié)果:
a   NaN
b   NaN
c   NaN
e   NaN
f   NaN
dtype: float64
  • Series乘法運算
import pandas as pd
import numpy as np

s1 = pd.Series(np.random.randn(3), index=['a','b','c'])

s2 = pd.Series(np.random.randn(3), index=['a','b','c'])

print(s1)

print(s2)

print('s1 * s2 = \n%s' % (s1 * s2))

print('s1 * 10 = \n%s' % (s1 * 10))

OUT:
a   -0.149056
b    0.637856
c   -1.357440
dtype: float64
a   -0.443937
b   -0.695017
c    2.217806
dtype: float64
s1 * s2 = 
a    0.066171
b   -0.443321
c   -3.010538
dtype: float64
s1 * 10 = 
a    -1.490556
b     6.378556
c   -13.574397
dtype: float64

算術(shù)操作都是按照索引去操作的,如果一個兩個Series的對所不同,那么他們的結(jié)果將是一個union操作,他們的非交集將會用缺省值NaN代替。

okay, Series的介紹就到這里,希望你能跟我一起去學(xué)習(xí),去進步


歡迎關(guān)注我:「愛做飯的老謝」,老謝一直在努力...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容