Pandas的学习(2.Series的索引和切片、基本概念以及Series的运算)
Series的索引和切片
? ?可以取中括號取單個(gè)索引(此時(shí)返回的是元素類型),或者中括號里一個(gè)列表取多個(gè)索引(此時(shí)返回的仍然是一個(gè)Series類型)
? ? 分為顯示索引和隱式索引:
(1) 顯示索引 (必須給索引的值):
? ? -- 使用index中的元素作為索引值
? ? -- 使用 .loc[]? (推薦)
注意此時(shí)是閉區(qū)間
import numpy as np from pandas import Series# 創(chuàng)建好Series s = Series(np.random.random(10),index=list('abcdefghig')) print(s) print(s['a']) # 可以直接取出行號為 'a' 的數(shù)據(jù) print(s.loc['a']) # 通過 .loc[] 的 方式取出索引為'a'的值 '''運(yùn)行結(jié)果:a 0.866009b 0.173073c 0.679109d 0.247098e 0.115333f 0.085793g 0.135284h 0.203943i 0.125305g 0.564275dtype: float640.85981856788197520.8598185678819752 '''(2) 隱式索引:
? ?--- 使用整數(shù)作為索引值
? ?--- 使用? .iloc[]? (推薦)
?注意: 此時(shí)是半開區(qū)間
print(s[0]) # 通過[]整數(shù)的方法取出相應(yīng)索引的值 print(s.iloc[0]) # 通過 .iloc[] 取出相應(yīng)索引的值 """運(yùn)行結(jié)果:0.328480026309244670.32848002630924467 """(3) 切片? ?(代碼實(shí)例)
# 切片 '''# 取出索引值為 'a'到'e'的值''' print(s['a':'e']) '''# 取出從第一個(gè)開始到第五個(gè)''' print(s[0:5]) '''取的方法和列表大致相同'''?
?Series的基本概念
? ? 1. 可以把Series看成一個(gè)定長的有序字典
? ? ? ? ?可以通過shape,size,index,values等得到series的屬性
2.?可以通過head(),tail()快速查看Series對象的樣式
? ? ?對于大數(shù)據(jù)來說,讀取文件的前幾行和讀取文件的后幾行來說是非常必要的
'''head()方法,打印前幾行,默認(rèn)只打印前5行''' print(s.head()) '''可以給head()方法中傳遞正整數(shù)值,數(shù)值為幾,就打印前幾行''' print(s.head(7)) # 打印前7行'''tail()方法,打印后幾行,默認(rèn)只打印后5行''' print(s.tail()) '''可以給tail()方法中傳遞正整數(shù)值,數(shù)值為幾,就打印后幾行''' print(s.tail(7)) # 打印后5行3.當(dāng)索引沒有對應(yīng)的值時(shí),可能出現(xiàn)缺失數(shù)據(jù)顯示NaN(not a number)的情況
s1 = Series([1, 26, None, np.nan], index=list('金木水火')) print(s1) """運(yùn)行結(jié)果:金 1.0木 26.0水 NaN火 NaNdtype: float64 """? ? 有空值時(shí),是可以進(jìn)行加和等運(yùn)算的,Series會自動將無效的空值等轉(zhuǎn)化為float型,而在numpy的類型中是不可以的??
4.可以使用pd.isnull(),pd.notnull(),或自帶isnull(),notnull()函數(shù)檢測缺失數(shù)據(jù)
'''判斷Series是否為空,返回的類型還是Series''' print(s1.isnull()) """ 結(jié)果金 False木 False水 True火 Truedtype: bool """'''判斷Series不為空嗎 , 為空返回False,不為空返回True''' print(s1.notnull()) """ 結(jié)果:金 True木 True水 False火 Falsedtype: bool """'''取出Series中不為空的數(shù)據(jù) Series[Series.notnull()]''' print(s1[s1.notnull()]) """金 1.0木 26.0dtype: float64 """5.Series對象本身及其索引都有一個(gè)name屬性,??
? ? name的作用: 區(qū)分,在DataFrame中用于區(qū)分,在DataFrame中是列名
s1.name = '元素' print(s1) # 然后就會有Name屬性 """ 結(jié)果:金 1.0木 26.0水 NaN火 NaNName: 元素, dtype: float64 """在運(yùn)算中自動對齊不同索引的數(shù)據(jù)
如果索引不對應(yīng),則補(bǔ)NaN
?? ?注意:要想保留所有的index,則需要使用.add()函數(shù)
?Series的運(yùn)算
? ?1.可以進(jìn)行加減乘除? ? (直接利用加減乘除符號進(jìn)行運(yùn)算時(shí),Nan是不會進(jìn)行加減乘除的)
print(s1 + 10) """ 金 11.0 木 36.0 水 NaN 火 NaN Name: 元素, dtype: float64 """2.? 使用add()方法,參數(shù)fill_value,? ? 如果在進(jìn)行加減乘除運(yùn)算的時(shí)候,有NaN的值,
? ? 那么fill_value默認(rèn)會將NaN設(shè)置為= 后面的值
print(s1.add(10,fill_value=0)) # fill_value=0把NaN設(shè)置為0 """ 金 11.0 木 36.0 水 10.0 火 10.0 Name: 元素, dtype: float64 """?3.Series之間進(jìn)行運(yùn)算
? ?---? 在運(yùn)算中自動對齊不同索引的數(shù)據(jù)? ? ? ??Series最重要的特征是有索引值
? ?--- 如果索引對應(yīng),,在進(jìn)行相加時(shí),索引相同進(jìn)行相加
? ?---? 如果索引不對應(yīng),則補(bǔ)NaN
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?注意:要想保留所有的index,則需要使用.add()函數(shù)
Series數(shù)據(jù)有空值(None)時(shí),是可以的進(jìn)行相加的
總結(jié)
以上是生活随笔為你收集整理的Pandas的学习(2.Series的索引和切片、基本概念以及Series的运算)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pandas的学习(1.pandas的介
- 下一篇: Pandas的学习(3.DataFram