pandas簡介及其數(shù)據(jù)結(jié)構(gòu)Series詳解

python高級應(yīng)用與數(shù)據(jù)分析學(xué)習(xí)筆記 11

1、簡介

1.1 介紹

Python Data Analysis Library 或 pandas 是基于NumPy 的一種工具,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的。Pandas 納入了大量庫和一些標(biāo)準(zhǔn)的數(shù)據(jù)模型,提供了高效地操作大型數(shù)據(jù)集所需的工具。pandas提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法。你很快就會發(fā)現(xiàn),它是使Python成為強(qiáng)大而高效的數(shù)據(jù)分析環(huán)境的重要因素之一。

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

Series:一種類似于一維數(shù)組的對象,是由一組數(shù)據(jù)(各種numpy數(shù)據(jù)類型)以及一組與之相關(guān)的數(shù)據(jù)標(biāo)簽(即索引)組成。僅由一組數(shù)據(jù)也可產(chǎn)生簡單的Series對象,注意:Series中的索引值是可以重復(fù)的,與Numpy中的一維array類似。二者與Python基本的數(shù)據(jù)結(jié)構(gòu)List也很相近,其區(qū)別是:List中的元素可以是不同的數(shù)據(jù)類型,而Array和Series中則只允許存儲相同的數(shù)據(jù)類型,這樣可以更有效的使用內(nèi)存,提高運(yùn)算效率。

Time- Series:以時(shí)間為索引的Series。

DataFrame:二維的表格型數(shù)據(jù)結(jié)構(gòu)。很多功能與R中的data.frame類似??梢詫ataFrame理解為Series的容器。也可以看成一個(gè)表格型的數(shù)據(jù)結(jié)構(gòu),包含有一組有序的列,每列可以是不同的值類型(數(shù)值、字符串、布爾型等) DataFrame既有行索引也有列索引,可以被看作是由Series組成的字典

Panel :三維的數(shù)組,可以理解為DataFrame的容器。

1.3 pandas 的三大作用

數(shù)據(jù)的引入

數(shù)據(jù)的特征提取

數(shù)據(jù)的清洗

1.4 查看以及安裝步驟

先通過Anaconda Prompt 來查看是否安裝了pandas


image.png

在安裝列表里面可以看到已經(jīng)安裝pandas,如果沒有安裝就是用condas install pandas 或者 pip install pandas 命令來安裝pandas


image.png

pandas依賴4個(gè)庫:setuptools numpy python-dateutil pytz


image.png
image.png
1.5 有了numpy庫為什么還會出現(xiàn)pandas庫?
import numpy as  np
import pandas as pd

# numpy創(chuàng)建的二維數(shù)組
arr = np.random.randint(0,10,(3,4))
print("numpy創(chuàng)建的二維數(shù)組===================")
print(arr)

# numpy創(chuàng)建的一維數(shù)組
arr = np.array([1,3,5,7,9])
print("numpy創(chuàng)建的一維數(shù)組===================")
print(arr,arr.dtype)

# pandas創(chuàng)建的一維數(shù)組
s0 = pd.Series(arr)
print("pandas創(chuàng)建的一維數(shù)組===================")
print(s0)

image.png

可以看出通過numpy創(chuàng)建的一維數(shù)組,二維數(shù)組等,比較難看懂每一個(gè)意思,而pandas創(chuàng)建的,可以很很形象看出每一個(gè)的意思,比較容易讀懂。

2、Series創(chuàng)建的兩種方式

2.1 通過一維數(shù)組創(chuàng)建
# 通過一維數(shù)組創(chuàng)建Series
# 通過numpy生成一維數(shù)組
arr = np.array([1,3,5,7,9])
s0 = pd.Series(arr)
print("通過numpy生成一維數(shù)組===================")
print(s0)

# 直接賦值一維數(shù)組
s0 = pd.Series(data=[80, 90, 100], dtype=np.float)
print("直接賦值一維數(shù)組,沒給index的話就默認(rèn)從0開始===================")
print(s0)

s0 = pd.Series(data=[80, 90, 100], index=['android', 'java', 'python'], dtype=np.float)
print("直接賦值一維數(shù)組,賦值index===================")
print(s0)
image.png
2.2 通過字典的方式創(chuàng)建
import numpy as  np
import pandas as pd


dict0 = {'android': 80, 'java': 90, 'python': 100}
s0 = pd.Series(dict0, dtype=np.float)
print(s0)
image.png

3、 Series屬性的獲取

3.1 dtype、index、values基本屬性的獲取
import numpy as  np
import pandas as pd

dict0 = {'android': 80, 'java': 90, 'python': 100}
s0 = pd.Series(dict0, dtype=np.float)
print("s0===================")
print(s0)

print("s0.dtype===================")
print(s0.dtype)

print("s0.index===================")
print(s0.index)

print("s0.values===================")
print(s0.values)

print("更換series的index===================")
print("index個(gè)數(shù)一樣的做法===================")
s0.index = [u'追夢', 'a2', 'a3']   #注意:index中的值可以重復(fù),以這種方式更換index的值,個(gè)數(shù)必須與數(shù)組的個(gè)數(shù)一樣
# s0.index = [u'追夢', 'a2', 'a3','a2']  #index與原數(shù)組不一樣的話就會報(bào):ValueError: Length mismatch: Expected axis has 3 elements, new values have 4 elements
print(s0)
print("index個(gè)數(shù)不一樣的做法===================")
s0 = pd.Series(s0, index=['android', 'java', 'python','python'])
print(s0)
image.png
3.2 Series及其索引的name屬性
import numpy as  np
import pa

# name  series對象   index也有name屬性
s0 = pd.Series({'張伊曼': 100, '張?jiān)娫?: 88, '張巧玲': 99})
s0.name = '數(shù)學(xué)'
s0.index.name = '考試成績'
print(s0)
image.png

4、Series值的獲取的兩種方式

(1) 通過方括號+索引的方式獲取對應(yīng)索引的數(shù)據(jù),可能返回多條數(shù)據(jù)
(2) 通過方括號+下標(biāo)值的方式獲取數(shù)據(jù),下標(biāo)值的取值范圍為:[0, len(Series.values));另外下標(biāo)值也可以是負(fù)數(shù),表示從右往左獲取數(shù)據(jù)
import numpy as  np
import pa

dict0 = {'android': 80, 'java': 90, 'python': 100}
s0 = pd.Series(dict0, dtype=np.float)
print("s0===================")
print(s0)
print("s0['android':]===================")
print(s0['android':])
print("s0['android':'java']===================")
print(s0['android':'java'])       #取值包頭包尾
print("s0[0:]===================")
print(s0[0:])
print("s0[0:2]===================")
print(s0[0:2])    #取值包頭不包尾
image.png

5、Series運(yùn)算

# Series運(yùn)算
dict0 = {'android': 80, 'java': 90, 'python': 100}
s0 = pd.Series(dict0, dtype=np.float)
print("s0===================")
print(s0)
arr0 = np.array([50, 80, 100])
print("s0===================")
print(arr0)
print("s0+arr0===================")
print(s0+arr0)   #運(yùn)算 + - * / 等都適合
image.png

6、 自動(dòng)對齊

# 自動(dòng)對齊
s0 = pd.Series(data=[20, 30, 40], index=['s1', 's2', 's3'])
s1 = pd.Series(data=[60, 80, 100], index=['s3', 's4', 's2'])
print(s0+s1)
image.png

7、isnull 與 notnull

s0 = pd.Series({'android': 80, 'java': 90, 'python': 100})
s0 = pd.Series(s0, index=['android', 'java', 'python','c++'])
s0[pd.isnull(s0)] = 0
# s0[pd.notnull(s0)] = 0
print(s0)
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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