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

pandas有兩個(gè)很重要的的數(shù)據(jù)結(jié)構(gòu):Series和DataFrame,今天先學(xué)習(xí)Series的用法。
Series是一種類似于一維數(shù)組的對(duì)象,它由一組數(shù)據(jù)(各種NumPy數(shù)據(jù)類型)以及一組與之相關(guān)的數(shù)據(jù)標(biāo)簽(即索引)組成。

例如:
1.png

從結(jié)果可以看出Series的字符串表現(xiàn)形式為:索引在左邊,值在右邊。在上面的例子中我并沒(méi)有為數(shù)據(jù)指定具體索引,它會(huì)自動(dòng)創(chuàng)建一個(gè)0到N-1(N為數(shù)據(jù)的長(zhǎng)度)的整數(shù)型索引。

還可以通過(guò)Series的values和index屬性獲取數(shù)組的表示形式和索引對(duì)象:
2.png

創(chuàng)建Series帶有一個(gè)可以對(duì)各個(gè)數(shù)據(jù)點(diǎn)進(jìn)行標(biāo)記的索引:
3.png

通過(guò)索引的方式選取Series中的單個(gè)或一組值:
4.png

NumPy數(shù)組運(yùn)算(如根據(jù)布爾型數(shù)組進(jìn)行過(guò)濾、標(biāo)量乘法、應(yīng)用數(shù)學(xué)函數(shù)等)都會(huì)保留索引和值之間的鏈接:
5.png

可以把Series看成一個(gè)有定長(zhǎng)的有序字典,因?yàn)樗撬饕档綌?shù)據(jù)值的一個(gè)映射:
6.png

如果數(shù)據(jù)被存放在一個(gè)Python字典中,可以直接通過(guò)這個(gè)字典來(lái)創(chuàng)建Series。下面以2016年年末四個(gè)省常住人口(萬(wàn))為例:
7.png

如果只傳入一個(gè)字典,則結(jié)果Series中的索引就是原字典的鍵(有序排列):
8.png

在上面的例子中,province中與provinces索引相匹配的3個(gè)值會(huì)被找出來(lái)并放到相對(duì)應(yīng)的位置上,但是我給的"Hainan"在province中找不到,所以其結(jié)果為NaN(即“非數(shù)字”(not a number),在pandas中,它用于表示缺失或NA值)。

pandas的isnull和notnull函數(shù)可用于檢測(cè)缺失數(shù)據(jù):
9.png

Series也有類似的實(shí)例方法:
10.png

Series最重要的一個(gè)功能是:它在算術(shù)運(yùn)算中會(huì)自動(dòng)對(duì)齊不同索引的數(shù)據(jù)。

例如:
11.png

Series對(duì)象本身及其索引都有一個(gè)name屬性:
12.png

Series的索引可以通過(guò)賦值的方式就地修改:
13.png

附源碼:

# coding: utf-8

# In[1]:


import pandas as pd
from pandas import Series,DataFrame
obj = Series([5,9,2,-8])
print obj


# In[2]:


print obj.values


# In[3]:


print obj.index


# In[4]:


obj2 = Series([6,-1,7,3],index=['a','b','c','d'])
print obj2


# In[5]:


# 通過(guò)索引查找具體值
print obj2['b']


# In[6]:


# 替換值
obj2['a'] = -5
print obj2


# In[7]:


# 通過(guò)索引查找一組值
print obj2[['a','b','c']]


# In[8]:


print obj2


# In[9]:


# 查找大于0的值
print obj2[obj2 > 0]


# In[10]:


# 數(shù)組標(biāo)量乘法
print obj2 * 2


# In[11]:


# 返回 e(自然對(duì)數(shù)的底)的冪次方
import numpy as np
e = np.exp(obj2)
print e


# In[12]:


'd' in obj2


# In[13]:


'e' in obj2


# In[14]:


# Series與字典的用法
province = {'Guangdong':10999,'Shandong':9946.64,'Sichuan':8262,'Henan':9532.42}
obj3 = Series(province)
print obj3


# In[15]:


provinces = ['Hainan','Guangdong','Shandong','Sichuan']
obj4 = Series(province,index=provinces)
print obj4


# In[16]:


# 檢測(cè)缺失數(shù)據(jù)
pd.isnull(obj4)


# In[17]:


# 檢測(cè)不缺失的數(shù)據(jù)
pd.notnull(obj4)


# In[18]:


# Series檢測(cè)缺失數(shù)據(jù)
obj4.isnull()


# In[19]:


print obj3


# In[20]:


print obj4


# In[21]:


# Series自動(dòng)對(duì)齊不同索引數(shù)據(jù)
print (obj3 + obj4)


# In[22]:


# Series對(duì)象本身及其索引的name屬性
obj4.name = 'population'
obj4.index.name = 'province'
print obj4


# In[23]:


print obj


# In[24]:


# 通過(guò)賦值修改Series的索引
obj.index = ['Bob','Steve','Jeff','Ryan']
print obj
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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