對(duì)pandas中兩種數(shù)據(jù)類型Series和DataFrame的區(qū)別詳解
1. Series相當(dāng)于數(shù)組numpy.array類似
s1=pd.Series([1,2,4,6,7,2]) s2=pd.Series([4,3,1,57,8],index=['a','b','c','d','e']) print s2 obj1=s2.values # print obj1 obj2=s2.index # print obj2 # print s2[s2>4] # print s2['b']

1.Series 它是有索引,如果我們未指定索引,則是以數(shù)字自動(dòng)生成。
下面是一些例子:
obj=Series([4,7,-5,3]) print obj #輸出結(jié)果如下: # 0 4 # 1 7 # 2 -5 # 3 3 print obj.values #取出它的值 #[ 4 7 -5 3] print obj.index #取出索引值 #輸出結(jié)果如下: # RangeIndex(start=0, stop=4, step=1) obj2=Series([4,7,-5,3],index=['d','b','a','c']) print obj2 #輸出結(jié)果如下: # d 4 # b 7 # a -5 # c 3 #可以通過索引的方式選擇Series中的單個(gè)或一組值 print obj2['a'] #輸出結(jié)果:-5 print obj2['d'] #輸出結(jié)是:4
2. Series的一些操作
Series.order()進(jìn)行排序,而DataFrame則用sort或者sort_index
print ratings_by_title.order(ascending=False)[:10]
(1)Numpy數(shù)組運(yùn)算(根據(jù)布爾型數(shù)組進(jìn)行過濾、標(biāo)量乘法、應(yīng)用數(shù)學(xué)函數(shù)等)都會(huì)保留索引和值之間的鏈接
print obj2[obj2>0] #取出>0的值 #輸出結(jié)果如下: # d 4 # b 7 # c 3 print obj2*2 #輸出結(jié)果如下: # d 8 # b 14 # a -10 # c 6
(2)還可以將Series看成是一個(gè)定長的有序字典,因?yàn)樗撬饕档綌?shù)據(jù)值的一個(gè)映射。它可以用在許多原來需要字典參數(shù)的函數(shù)中。
print 'b' in obj2 #obj2中有索引'b'?若有就返回'True'
(3)如果數(shù)據(jù)被存在一個(gè)python字典中,也可以直接通過這個(gè)字典來創(chuàng)建Series.
sdata={'Ohio':35000,'Texax':71000,'Oregon':16000,'Utah':5000}
obj3=Series(sdata)
print obj3
#輸出結(jié)果如下:
# Ohio 35000
# Oregon 16000
# Texax 71000
# Utah 5000
#注:如果只傳入一個(gè)字典,則結(jié)果Series中的索引就是原字典的鍵(有序排列)
states=['California','Ohio','Oregon','Texax']
obj4=Series(sdata,index=states) #將sdata字典創(chuàng)建Series,索引用states來創(chuàng)建
print obj4
#California在sdata中沒有相應(yīng)的值,故是NaN缺省值
# California NaN
# Ohio 35000.0
# Oregon 16000.0
# Texax 71000.0
(4)pandas中的isnull和notnull函數(shù)可以用于檢測(cè)缺失數(shù)據(jù),Series也有類似的方法
print pd.isnull(obj4) #輸出結(jié)果如下: # California True # Ohio False # Oregon False # Texax False # dtype: bool print pd.notnull(obj4) #輸出結(jié)果如下: # California False # Ohio True # Oregon True # Texax True # dtype: bool print obj4.isnull() #Series的isnull方法 #輸出結(jié)果如下: # California True # Ohio False # Oregon False # Texax False # dtype: bool
(5)Series最重要的一個(gè)功能是:它在算術(shù)運(yùn)算中會(huì)自動(dòng)對(duì)齊不同索引的數(shù)據(jù)。
print obj3,obj4 # Ohio 35000 # Oregon 16000 # Texax 71000 # Utah 5000 # dtype: int64 # # California NaN # Ohio 35000.0 # Oregon 16000.0 # Texax 71000.0 # dtype: float64 print obj3+obj4 # California NaN # Ohio 70000.0 # Oregon 32000.0 # Texax 142000.0 # Utah NaN # dtype: float64
(6)Series對(duì)象本身及其索引都有一個(gè)name屬性,該屬性跟pandas其他的關(guān)鍵功能關(guān)系非常密切
obj4.name='population' obj4.index.name='state' print obj4 #輸出如下:加上state和name # state # California NaN # Ohio 35000.0 # Oregon 16000.0 # Texax 71000.0 # Name: population, dtype: float64
(7)Series的索引可以通過賦值的方式就地修改
obj2.index=['Bob','Steven','Jeff','Ryan'] print obj2 #輸出結(jié)果如下: # Bob 4 # Steven 7 # Jeff -5 # Ryan 3 # dtype: int64 obj2['Bob']=15 print obj2 #輸出結(jié)果如下: # Bob 15 # Steven 7 # Jeff -5 # Ryan 3 # dtype: int64 print obj2['Bob'].values #沒有這種表示法,報(bào)錯(cuò)。因?yàn)轭愃谱值淙≈?,直接取鍵值即可 print obj2.values #查看所有值
3. DataFrame相當(dāng)于有表格,有行表頭和列表頭
a=pd.DataFrame(np.random.rand(4,5),index=list("ABCD"),columns=list('abcde'))
print a

4.DataFrame的一些操作
#增加列或修改列
a['f']=[1,2,3,4]
a['e']=10
print a
print "======================="
#增加行或修改行
a.ix['D']=10
# print a
S=pd.DataFrame(np.random.rand(4,6),index=list('EFGH'),columns=list('abcdef'))
a=a.append(S)
print a
print "======================="
#切片
print (a[['b','e']]) #取'b','e'列
print a.loc['A':'D',['a','c','f']] #取'A'-'D'行'a','c','f'列
print "======================="
#減少行或減少列
a=a.drop(['C','D']) #刪除'C'行和'D'
print a
a=a.drop('a',axis=1) #刪除'a'列,axis=0表示行,axis=1表示列
print a
print "======================="
#缺省值處理
a.iloc[2,3]=None #取第三行第4列值設(shè)為None
a.iloc[4,0]=None #取第五行第1列值設(shè)為None
print a
a=a.fillna(5) #缺省值處(即NaN處填充為5)
print a
#缺省值去行即有缺省值的把這一行都去掉
a.iloc[2,3]=None
a.iloc[4,0]=None
print a
a=a.dropna() #刪除缺省值為NaN的行
print a
print "======================="
#讀取excel,適當(dāng)改動(dòng)后,保存到excel中
e1=pd.read_excel('test.xlsx',sheetname='Sheet1')
e1.columns=['class','no','name','sex','dormitory','phonenumber']
print(e1)
print(e1.ix[2])
print(e1['class'])
print(e1.sex)
#可將取出的數(shù)據(jù)處理,處理完后再保存到excel中去
e2=pd.read_excel('test_copy.xlsx',sheetname='Sheet1',names='table1',header=None)
e2.columns=['a','b','c','d']
print(e2)
e2.to_excel('test_write.xlsx',header=False,index=False)
(1)構(gòu)建DataFrame 的方法很多,最常用的一種是直接傳入一個(gè)由等長列表或者Numpy數(shù)組組成的字典
import numpy as np from numpy import random import matplotlib.pyplot as plt from numpy.linalg import inv,qr from pandas import Series,DataFrame import pandas as pd
data={'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
'year':[2000,2001,2002,2001,2002],
'pop':[1.5,1.7,3.6,2.4,2.9]}
frame=DataFrame(data)
print frame
#輸出的結(jié)果如下:
# pop state year
# 0 1.5 Ohio 2000
# 1 1.7 Ohio 2001
# 2 3.6 Ohio 2002
# 3 2.4 Nevada 2001
# 4 2.9 Nevada 2002
(2)如果指定了列序列,則DataFrame的列就會(huì)按照指定的順序進(jìn)行排序
frame1=DataFrame(data,columns=['year','state','pop']) print frame1 #輸出的結(jié)果如下: # year state pop # 0 2000 Ohio 1.5 # 1 2001 Ohio 1.7 # 2 2002 Ohio 3.6 # 3 2001 Nevada 2.4 # 4 2002 Nevada 2.9
(3)跟Series一樣,如果傳入的列在數(shù)據(jù)中找不到,就會(huì)產(chǎn)生NA值
frame2=DataFrame(data,columns=['year','state','pop','debt'],
index=['one','two','three','four','five']) #column列的索引,index是行的索引
print frame2
#輸出的結(jié)果如下:
# year state pop debt
# one 2000 Ohio 1.5 NaN
# two 2001 Ohio 1.7 NaN
# three 2002 Ohio 3.6 NaN
# four 2001 Nevada 2.4 NaN
# five 2002 Nevada 2.9 NaN
print frame2.columns #輸出列的索引
#輸出結(jié)果如下:
# Index([u'year', u'state', u'pop', u'debt'], dtype='object')
(4)類似字典標(biāo)記的方式或?qū)傩缘姆绞?,可以將DataFrame的列獲取為一個(gè)Series.
print frame2['state'] #取出列索引為state的列的數(shù)據(jù) #輸出結(jié)果如下: # one Ohio # two Ohio # three Ohio # four Nevada # five Nevada # Name: state, dtype: object print frame2.year #輸出結(jié)果如下: # one 2000 # two 2001 # three 2002 # four 2001 # five 2002 # Name: year, dtype: int64
(5)返回的Series擁有原DataFrame相同的索引,且其name屬性也已經(jīng)被相應(yīng)地設(shè)置好了。行也可以通過位置或名稱的方式進(jìn)行獲取
比如用索引字段ix,ix是取行的索引
print frame2.ix['three'] #輸出的結(jié)果如下: # year 2002 # state Ohio # pop 3.6 # debt NaN # Name: three, dtype: object
(6)可以通過賦值的方式進(jìn)行修改。
# frame2['debt']=16.5 #debt列全為16.5 # print frame2 #輸出結(jié)果如下: # year state pop debt # one 2000 Ohio 1.5 16.5 # two 2001 Ohio 1.7 16.5 # three 2002 Ohio 3.6 16.5 # four 2001 Nevada 2.4 16.5 # five 2002 Nevada 2.9 16.5 #將列表或數(shù)組賦值給某個(gè)列時(shí),其長度必須跟DataFrame的長度相匹配。 #如果賦值的是一個(gè)Series,就會(huì)精確匹配DataFrame的索引,所有的空位都將被填上缺失值。 frame2['debt']=np.arange(5.) print frame2 #輸出結(jié)果如下: # year state pop debt # one 2000 Ohio 1.5 0.0 # two 2001 Ohio 1.7 1.0 # three 2002 Ohio 3.6 2.0 # four 2001 Nevada 2.4 3.0 # five 2002 Nevada 2.9 4.0 #賦值一個(gè)Series val=Series([-1.2,-1.5,-1.7],index=['two','four','five']) frame2['debt']=val print frame2 #輸出結(jié)果如下:不在index中的索引的值都賦了Nan # year state pop debt # one 2000 Ohio 1.5 NaN # two 2001 Ohio 1.7 -1.2 # three 2002 Ohio 3.6 NaN # four 2001 Nevada 2.4 -1.5 # five 2002 Nevada 2.9 -1.7 #為不存在的列賦值會(huì)創(chuàng)建出一個(gè)新列。關(guān)鍵字del用于刪除列。 frame2['eastern']=frame2.state=='Ohio' #沒有eastern列,固會(huì)自動(dòng)增加一列 #frame2.state=='Ohio'如果等于則返回True,否則返回False print frame2 # year state pop debt eastern # one 2000 Ohio 1.5 NaN True # two 2001 Ohio 1.7 -1.2 True # three 2002 Ohio 3.6 NaN True # four 2001 Nevada 2.4 -1.5 False # five 2002 Nevada 2.9 -1.7 False del frame2['eastern'] #刪除eastern列 print frame2 #返回結(jié)果如下: # year state pop debt # one 2000 Ohio 1.5 NaN # two 2001 Ohio 1.7 -1.2 # three 2002 Ohio 3.6 NaN # four 2001 Nevada 2.4 -1.5 # five 2002 Nevada 2.9 -1.7 print frame2.columns #查看frame2的列 #輸出結(jié)果如下:Index([u'year', u'state', u'pop', u'debt'], dtype='object')
(7)另一種常見的數(shù)據(jù)形式是嵌套字典(也就是字典的字典)
pop={'Nevada':{2001:2.4,2002:2.9},
'Ohio':{2000:1.5,2001:1.7,2002:3.6}}
frame3=DataFrame(pop)
print frame3
#輸出的結(jié)果如下:
# Nevada Ohio
# 2000 NaN 1.5
# 2001 2.4 1.7
# 2002 2.9 3.6
#可以對(duì)frame進(jìn)行轉(zhuǎn)置
print frame3.T
#輸出結(jié)果如下:
# 2000 2001 2002
# Nevada NaN 2.4 2.9
# Ohio 1.5 1.7 3.6
print DataFrame(pop,index=[2001,2002,2003])
#輸出結(jié)果如下:
# Nevada Ohio
# 2001 2.4 1.7
# 2002 2.9 3.6
# 2003 NaN NaN
pdata={'Ohio':frame3['Ohio'][:-1],
'Nevada':frame3['Nevada'][:2]}
print DataFrame(pdata)
#輸出結(jié)果如下:
# Nevada Ohio
# 2000 NaN 1.5
# 2001 2.4 1.7
可以輸入給DataFrame構(gòu)造器的數(shù)據(jù):
二維ndarray 數(shù)據(jù)矩陣,還可以傳入行標(biāo)和列標(biāo)
由數(shù)組、列表或元組組成的字典 每個(gè)序列會(huì)變成DataFrame的一列,所有序列的長度必須相同
Numpy的結(jié)構(gòu)化/記錄數(shù)組 類似于“由數(shù)組組成的字典”
由Series組成的字典 每個(gè)Series會(huì)成為一列。如果沒顯式指定索引,由各Series的索引會(huì)被合
并成結(jié)果的行索引
由字典組成的字典 各內(nèi)層字典會(huì)成為一列。鍵會(huì)被合并成結(jié)果的行索引,跟“由Series組成的字典”
的情況一樣
字典或Series的列表 各項(xiàng)將會(huì)成為DataFrame的一行。字典鍵或Series索引的并集將會(huì)成為DataFrame
的列標(biāo)
由列表或元組組成的列表 類似于“二維ndarray”
另一個(gè)DataFrame 該DataFrame的索引將會(huì)被沿用,除非顯式指定了其它索引
Numpy的MaskedArray 類似于"二維ndarray"的情況,只是掩碼值在結(jié)果DataFrame會(huì)變成NA/缺失值
#如果設(shè)置了DataFrame的index和columns的name屬性,則這些信息也會(huì)被顯示出來: frame3.index.name='year'; frame3.columns.name='state' print frame3 #輸出結(jié)果如下: # state Nevada Ohio # year # 2000 NaN 1.5 # 2001 2.4 1.7 # 2002 2.9 3.6 #跟Series一樣,values屬性也會(huì)以二維ndarray的形式返回DataFrame中的數(shù)據(jù): print frame3.values # [[ nan 1.5] # [ 2.4 1.7] # [ 2.9 3.6]] #如果DataFrame各列的數(shù)據(jù)類型不同,則值數(shù)組的數(shù)據(jù)類型就會(huì)選用能兼容所有列的數(shù)據(jù)類型 print frame2.values # [[2000 'Ohio' 1.5 nan] # [2001 'Ohio' 1.7 -1.2] # [2002 'Ohio' 3.6 nan] # [2001 'Nevada' 2.4 -1.5] # [2002 'Nevada' 2.9 -1.7]]
以上這篇對(duì)pandas中兩種數(shù)據(jù)類型Series和DataFrame的區(qū)別詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python pcm音頻添加頭轉(zhuǎn)成Wav格式文件的方法
今天小編就為大家分享一篇python pcm音頻添加頭轉(zhuǎn)成Wav格式文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01
wxPython中wx.gird.Gird添加按鈕的實(shí)現(xiàn)
本文主要介紹了wxPython中wx.gird.Gird添加按鈕的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
Python imageio讀取視頻并進(jìn)行編解碼詳解
今天小編就為大家分享一篇Python imageio讀取視頻并進(jìn)行編解碼詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12
CodeWhisperer基于python使用經(jīng)驗(yàn)分享
這篇文章主要為大家介紹了CodeWhisperer基于python使用經(jīng)驗(yàn)分享,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
python使用ddddocr庫識(shí)別滑動(dòng)驗(yàn)證碼簡(jiǎn)單代碼示例
這篇文章主要介紹了如何使用ddddocr庫來識(shí)別滑塊驗(yàn)證碼,并提供了一個(gè)示例代碼和識(shí)別結(jié)果,同時(shí)提醒注意ddddocr庫的大小限制,可能會(huì)影響某些無服務(wù)器函數(shù)的部署,需要的朋友可以參考下2024-11-11
pandas數(shù)據(jù)分列實(shí)現(xiàn)分割符號(hào)&固定寬度
數(shù)據(jù)分列在數(shù)據(jù)處理中很常見,數(shù)據(jù)分列一般指的都是字符串分割,本文主要介紹了pandas數(shù)據(jù)分列實(shí)現(xiàn)分割符號(hào)&固定寬度,具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04
Python中BaseHTTPRequestHandler實(shí)現(xiàn)簡(jiǎn)單的API接口
本文主要介紹了Python中BaseHTTPRequestHandler實(shí)現(xiàn)簡(jiǎn)單的API接口,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07

