python开发pandas_二、Python开发---33、pandas(1)
pandas
pandas是一種Python數據分析的利器,是一個開源的數據分析包,最初是應用于金融數據分析工具而開發出來的,因此pandas為時間序列分析提供了很好的支持,pandas是PyData項目的一部分,它主要提供了五大功能:
支持文件存取操作,支持數據庫(sql)、html、json、pickle、csv(txt、excel)、sas、stata、hdf等
支持增刪改查、切片、高階函數、分組聚合等單表操作,以及和dict、list的互相轉換
支持多表拼接合并操作
支持簡單的繪圖操作
支持簡單的統計分析操作
官網:http://pandas.pydata.org/
官方文檔:http://pandas.pydata.org/pandas-docs/stable/
pandas引入約定——from pandas import Series, DataFrame
import pandas as pd
pandas中主要有兩種數據結構,分別是:Series和DataFrame
(1)Series:一種類似于一維數組的對象,是由一組數據(各種NumPy數據類型)以及一組與之相關的數據標簽(即索引)組成,僅由一組數據也可產生簡單的Series對象,注意:Series中的索引值是可以重復的
(2)DataFrame:一個表格型的數據結構,包含有一組有序的列,每列可以是不同的值類型(數值、字符串、布爾型等),DataFrame既有行索引也有列索引,可以被看做是由Series組成的字典
Series的創建
1、通過一維數組創建
Series屬性——常見屬性有values(獲取值)、index(獲得索引值)、dtype(獲得類型)
'''輸出為 0 1
1 2
2 3
3 4
4 5
dtype: int64'''
importpandas as pd
ser01= pd.Series([1,2,3,4,5])print(ser01)print('值',ser01.values) #輸出為 值 [1 2 3 4 5]
print('索引值',ser01.index) #輸出為 索引值 RangeIndex(start=0, stop=5, step=1)
print('類型',ser01.dtype) #輸出為 類型 int64
2、通過ndarray創建,利用series創建一個二維數組,因為series只能直接創建一維數組,如果要創建二維數組,必須導入numpy模塊,利用np.array(多維數組)
'''輸出為 0 [1, 2, 3, 4]
1 [1, 2, 3, 4, 5]
dtype: object'''
importpandas as pdimportnumpy as np
ser02=pd.Series(np.array([[1,2,3,4],[1,2,3,4,5]]))#表示將numpy里array創建多維數組的方法,嵌套到series里,創建多維數組
print(ser02)print('值',ser02.values) #輸出為 值 [list([1, 2, 3, 4]) list([1, 2, 3, 4, 5])]
print('索引值',ser02.index) #輸出為 索引值 RangeIndex(start=0, stop=2, step=1)
print('類型',ser02.dtype) #輸出為 類型 object
修改索引(index)和數據類型(dtype)
importpandas as pdimportnumpy as np
ser03=pd.Series([100,22,99,66])
ser03.index=['數學','英語','語文','綜合']print(ser03)'''輸出為 數學 100
英語 22
語文 99
綜合 66
dtype: int64'''
#另一種寫法
ser04=pd.Series(data=[100,22,99,66],dtype=np.float,index=['數學','英語','語文','綜合'])print(ser04)'''輸出為 數學 100.0
英語 22.0
語文 99.0
綜合 66.0
dtype: float64'''
3、通過字典方式創建series多維數組
#通過字典方式創建series多維數組
importpandas as pdimportnumpy as np
dict01=({'1001':'張三','1002':'李四','1003':'王麻子'}) #字典存放鍵值對-通過key取值
ser06=pd.Series(dict01) #將字典數據傳到series中,形成矩陣
print(ser06)'''輸出為 1001 張三
1002 李四
1003 王麻子
dtype: object'''
print('字典創建的值:',ser06.values) #輸出為 字典創建的值: ['張三' '李四' '王麻子']
print('字典創建的索引:',ser06.index) #輸出為 字典創建的索引: Index(['1001', '1002', '1003'], dtype='object')
Series值的獲取
Series值的獲取主要有兩種方式:
1、通過方括號+索引的方式讀取對應索引的數據,有可能返回多條數據
2、通過方括號+下標值的方式讀取對應下標值的數據,下標值的取值范圍為:(0,len(Series.values));另外下標值也可以是負數,表示從右往左獲取數據
series獲取多個值的方法類似numpy的bdarray切片操作,通過方括號+下標值/索引值+冒號(:)的形式獲取series對象的一部分數據
切片的兩種操作:
1、print(ser01[0:2])—通過下標值
2、print(ser01[‘a’:‘c’])–通過索引值
importpandas as pd#方括號+下標值
ser07=pd.Series(['A','B','C','D'])print(ser07[0]) #輸出為 A#方括號+索引
ser08=pd.Series(['A','B','C','D'])
ser08.index=(['a','b','c','d'])print(ser08['a']) #輸出為 A#通過numpy的ndarray的切片機制
ser09=pd.Series(['A','B','C','D'])
ser09.index=(['a','b','c','d'])#通過下標值
print(ser09[0:2]) #不包含終點
'''輸出為 a A
b B
dtype: object'''
#通過索引值
print(ser09['a':'c']) #包含終點
'''輸出為 a A
b B
c C
dtype: object'''
Series的運算
NumPy中的數組運算,在Series中都保留了,均可以使用,并且Series進行數組運算的時候,索引與值之間的映射關系不會發生改變,注意:其實在操作Series的時候,基本上可以把Series看成NumPy中的ndarray數組來進行操作,ndarray數組的絕大多數操作都可以應用到Series上
importpandas as pdimportnumpy as np
ser=pd.Series({'201612348':1000,'201612347':999,'201612346':666,'201612345':555})print(ser)'''輸出為 201612348 1000
201612347 999
201612346 666
201612345 555
dtype: int64'''
print(ser[ser>666])'''輸出為 201612348 1000
201612347 999
dtype: int64'''
print(ser/10)'''輸出為 201612348 100.0
201612347 99.9
201612346 66.6
201612345 55.5
dtype: float64'''
print(ser+1)'''輸出為 201612348 1001
201612347 1000
201612346 667
201612345 556
dtype: int64'''ser01=pd.Series([-1,-2,-3,-4])print(ser01)'''輸出為 0 -1
1 -2
2 -3
3 -4
dtype: int64'''
print(np.exp(ser01))'''輸出為 0 0.367879
1 0.135335
2 0.049787
3 0.018316
dtype: float64'''
print(np.fabs(ser01))'''輸出為 0 1.0
1 2.0
2 3.0
3 4.0
dtype: float64'''
Series缺失值檢測
1、什么是缺失值?沒有被賦值
2、確實和不賦值的區別:
不賦值——空指針異常
缺失——程序不會報空指針異常,也不會報程序異常,會用NaN填充
3、pandas中的isnull和notnul這兩個函數可以用在Series中檢查缺失值,這兩個函數返回的是一個布爾類型的Series
isnull——表示字典里有缺失值的判斷,有缺失值返回true反之false(返回的是bool類型)
notnull——表示字典里有缺失值的判斷,有缺失值返回false反之true(返回的是bool類型)
#缺失值檢測
importpandas as pdimportnumpy as np
ser16=pd.Series({'1001':'a','1002':'b','1003':'c'})print(ser16)'''輸出為 1001 a
1002 b
1003 c
dtype: object'''ser17=pd.Series(ser16,index=['1001','1002','1008'])print(ser17)'''輸出為 1001 a
1002 b
1008 NaN
dtype: object'''
#isnull
print(pd.isnull(ser17))'''輸出為 1001 False
1002 False
1008 True
dtype: bool'''
#notnull
print(pd.notnull(ser17))'''輸出為 1001 True
1002 True
1008 False
dtype: bool'''
Series自動對齊
當多個series對象之間進行運算的時候,如果不同series之間具有不同的索引值,那么運算會自動對齊不同索引值的數據,如果某個series沒有某個索引值,那么最終結果會賦值為NaN
自動對齊是基于一個列表元素或者多維數據的矩陣/矩陣乘積
原理:通過Series自動匹配index所對應的值,有匹配的值和index,按照原數據打印數據,如果對應位置沒有index值,那么用NAN填充
#順序不同
importpandas as pdser18=pd.Series([1,2,3,4],index=['a','b','c','d'])print(ser18)'''輸出為 a 1
b 2
c 3
d 4
dtype: int64'''ser19=pd.Series([10,20,30,40],index=['d','c','b','a'])print(ser18+ser19)'''輸出為 a 41
b 32
c 23
d 14
dtype: int64'''
#沒有某個索引值
ser20=pd.Series([1,2,3,4],index=['a','b','c','d'])print(ser20)'''輸出為 a 1
b 2
c 3
d 4
dtype: int64'''ser21=pd.Series([10,20,30,40],index=['d','c','b','f'])print(ser20+ser21)'''輸出為 a NaN
b 32.0
c 23.0
d 14.0
f NaN
dtype: float64'''
Series及其索引的name屬性
Series對象本身以及索引都具有一個name屬性,默認為空,根據需要可以進行賦值操作
#series的name屬性
importpandas as pd
ser22=pd.Series({'1001':'a','1002':'b','1003':'c'})
ser22.name='字母'ser22.index.name='小寫字母'
print(ser22)'''輸出為 小寫字母
1001 a
1002 b
1003 c
Name: 字母, dtype: object'''
總結
以上是生活随笔為你收集整理的python开发pandas_二、Python开发---33、pandas(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果15手机什么时候发布
- 下一篇: python 倒叙 数组_Python函