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

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

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


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)

可以看出通過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)

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)

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)

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)

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]) #取值包頭不包尾

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)算 + - * / 等都適合

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)

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)
