国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

對pandas中兩種數據類型Series和DataFrame的區別詳解

2020-01-04 14:05:41
字體:
來源:轉載
供稿:網友

1. Series相當于數組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 s2obj1=s2.values# print obj1obj2=s2.index# print obj2# print s2[s2>4]# print s2['b']

pandas,數據類型,Series,DataFrame

1.Series 它是有索引,如果我們未指定索引,則是以數字自動生成。

下面是一些例子:

obj=Series([4,7,-5,3])print obj#輸出結果如下:# 0  4# 1  7# 2  -5# 3  3print obj.values #取出它的值#[ 4 7 -5 3]print obj.index #取出索引值#輸出結果如下:# RangeIndex(start=0, stop=4, step=1)obj2=Series([4,7,-5,3],index=['d','b','a','c'])print obj2#輸出結果如下:# d  4# b  7# a  -5# c  3#可以通過索引的方式選擇Series中的單個或一組值print obj2['a'] #輸出結果:-5print obj2['d'] #輸出結是:4

2. Series的一些操作

Series.order()進行排序,而DataFrame則用sort或者sort_index

print ratings_by_title.order(ascending=False)[:10]

(1)Numpy數組運算(根據布爾型數組進行過濾、標量乘法、應用數學函數等)都會保留索引和值之間的鏈接

print obj2[obj2>0] #取出>0的值#輸出結果如下:# d  4# b  7# c  3print obj2*2#輸出結果如下:# d   8# b  14# a  -10# c   6

(2)還可以將Series看成是一個定長的有序字典,因為它是索引值到數據值的一個映射。它可以用在許多原來需要字典參數的函數中。

print 'b' in obj2 #obj2中有索引'b'?若有就返回'True'

(3)如果數據被存在一個python字典中,也可以直接通過這個字典來創建Series.

sdata={'Ohio':35000,'Texax':71000,'Oregon':16000,'Utah':5000}obj3=Series(sdata)print obj3#輸出結果如下:# Ohio   35000# Oregon  16000# Texax   71000# Utah    5000#注:如果只傳入一個字典,則結果Series中的索引就是原字典的鍵(有序排列)states=['California','Ohio','Oregon','Texax']obj4=Series(sdata,index=states) #將sdata字典創建Series,索引用states來創建print obj4#California在sdata中沒有相應的值,故是NaN缺省值# California    NaN# Ohio     35000.0# Oregon    16000.0# Texax     71000.0

(4)pandas中的isnull和notnull函數可以用于檢測缺失數據,Series也有類似的方法

print pd.isnull(obj4)#輸出結果如下:# California   True# Ohio     False# Oregon    False# Texax     False# dtype: boolprint pd.notnull(obj4)#輸出結果如下:# California  False# Ohio      True# Oregon     True# Texax     True# dtype: boolprint obj4.isnull() #Series的isnull方法#輸出結果如下:# California   True# Ohio     False# Oregon    False# Texax     False# dtype: bool

(5)Series最重要的一個功能是:它在算術運算中會自動對齊不同索引的數據。

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: float64print obj3+obj4# California     NaN# Ohio      70000.0# Oregon     32000.0# Texax     142000.0# Utah        NaN# dtype: float64

(6)Series對象本身及其索引都有一個name屬性,該屬性跟pandas其他的關鍵功能關系非常密切

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#輸出結果如下:# Bob    4# Steven  7# Jeff   -5# Ryan   3# dtype: int64obj2['Bob']=15print obj2#輸出結果如下:# Bob    15# Steven   7# Jeff   -5# Ryan    3# dtype: int64print obj2['Bob'].values #沒有這種表示法,報錯。因為類似字典取值,直接取鍵值即可print obj2.values #查看所有值

3. DataFrame相當于有表格,有行表頭和列表頭

a=pd.DataFrame(np.random.rand(4,5),index=list("ABCD"),columns=list('abcde'))print a

pandas,數據類型,Series,DataFrame

4.DataFrame的一些操作

#增加列或修改列a['f']=[1,2,3,4]a['e']=10print aprint "======================="#增加行或修改行a.ix['D']=10# print aS=pd.DataFrame(np.random.rand(4,6),index=list('EFGH'),columns=list('abcdef'))a=a.append(S)print aprint "======================="#切片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 aa=a.drop('a',axis=1) #刪除'a'列,axis=0表示行,axis=1表示列print aprint "======================="#缺省值處理a.iloc[2,3]=None #取第三行第4列值設為Nonea.iloc[4,0]=None #取第五行第1列值設為Noneprint aa=a.fillna(5) #缺省值處(即NaN處填充為5)print a#缺省值去行即有缺省值的把這一行都去掉a.iloc[2,3]=Nonea.iloc[4,0]=Noneprint aa=a.dropna() #刪除缺省值為NaN的行print aprint "======================="#讀取excel,適當改動后,保存到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)#可將取出的數據處理,處理完后再保存到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)構建DataFrame 的方法很多,最常用的一種是直接傳入一個由等長列表或者Numpy數組組成的字典

import numpy as npfrom numpy import randomimport matplotlib.pyplot as pltfrom numpy.linalg import inv,qrfrom pandas import Series,DataFrameimport 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#輸出的結果如下:#  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的列就會按照指定的順序進行排序

frame1=DataFrame(data,columns=['year','state','pop'])print frame1#輸出的結果如下:#  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一樣,如果傳入的列在數據中找不到,就會產生NA值

frame2=DataFrame(data,columns=['year','state','pop','debt'],         index=['one','two','three','four','five']) #column列的索引,index是行的索引print frame2#輸出的結果如下:#    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 NaNprint frame2.columns #輸出列的索引#輸出結果如下:# Index([u'year', u'state', u'pop', u'debt'], dtype='object')

(4)類似字典標記的方式或屬性的方式,可以將DataFrame的列獲取為一個Series.

print frame2['state'] #取出列索引為state的列的數據#輸出結果如下:# one    Ohio# two    Ohio# three   Ohio# four   Nevada# five   Nevada# Name: state, dtype: objectprint frame2.year#輸出結果如下:# one   2000# two   2001# three  2002# four   2001# five   2002# Name: year, dtype: int64

(5)返回的Series擁有原DataFrame相同的索引,且其name屬性也已經被相應地設置好了。行也可以通過位置或名稱的方式進行獲取

比如用索引字段ix,ix是取行的索引

print frame2.ix['three']#輸出的結果如下:# year   2002# state  Ohio# pop    3.6# debt   NaN# Name: three, dtype: object

(6)可以通過賦值的方式進行修改。

# frame2['debt']=16.5 #debt列全為16.5# print frame2#輸出結果如下:#    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#將列表或數組賦值給某個列時,其長度必須跟DataFrame的長度相匹配。#如果賦值的是一個Series,就會精確匹配DataFrame的索引,所有的空位都將被填上缺失值。frame2['debt']=np.arange(5.)print frame2#輸出結果如下:#    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#賦值一個Seriesval=Series([-1.2,-1.5,-1.7],index=['two','four','five'])frame2['debt']=valprint frame2#輸出結果如下:不在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#為不存在的列賦值會創建出一個新列。關鍵字del用于刪除列。frame2['eastern']=frame2.state=='Ohio' #沒有eastern列,固會自動增加一列#frame2.state=='Ohio'如果等于則返回True,否則返回Falseprint 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  Falsedel frame2['eastern'] #刪除eastern列print frame2#返回結果如下:#    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.7print frame2.columns #查看frame2的列#輸出結果如下:Index([u'year', u'state', u'pop', u'debt'], dtype='object')

(7)另一種常見的數據形式是嵌套字典(也就是字典的字典)

pop={'Nevada':{2001:2.4,2002:2.9},   'Ohio':{2000:1.5,2001:1.7,2002:3.6}}frame3=DataFrame(pop)print frame3#輸出的結果如下:#    Nevada Ohio# 2000   NaN  1.5# 2001   2.4  1.7# 2002   2.9  3.6#可以對frame進行轉置print frame3.T#輸出結果如下:#     2000 2001 2002# Nevada  NaN  2.4  2.9# Ohio   1.5  1.7  3.6print DataFrame(pop,index=[2001,2002,2003])#輸出結果如下:#    Nevada Ohio# 2001   2.4  1.7# 2002   2.9  3.6# 2003   NaN  NaNpdata={'Ohio':frame3['Ohio'][:-1],    'Nevada':frame3['Nevada'][:2]}print DataFrame(pdata)#輸出結果如下:#    Nevada Ohio# 2000   NaN  1.5# 2001   2.4  1.7

可以輸入給DataFrame構造器的數據:

二維ndarray          數據矩陣,還可以傳入行標和列標由數組、列表或元組組成的字典  每個序列會變成DataFrame的一列,所有序列的長度必須相同Numpy的結構化/記錄數組   類似于“由數組組成的字典”由Series組成的字典   每個Series會成為一列。如果沒顯式指定索引,由各Series的索引會被合     并成結果的行索引由字典組成的字典   各內層字典會成為一列。鍵會被合并成結果的行索引,跟“由Series組成的字典”     的情況一樣字典或Series的列表   各項將會成為DataFrame的一行。字典鍵或Series索引的并集將會成為DataFrame     的列標由列表或元組組成的列表   類似于“二維ndarray”另一個DataFrame   該DataFrame的索引將會被沿用,除非顯式指定了其它索引Numpy的MaskedArray   類似于"二維ndarray"的情況,只是掩碼值在結果DataFrame會變成NA/缺失值
#如果設置了DataFrame的index和columns的name屬性,則這些信息也會被顯示出來:frame3.index.name='year';frame3.columns.name='state'print frame3#輸出結果如下:# state Nevada Ohio# year# 2000   NaN  1.5# 2001   2.4  1.7# 2002   2.9  3.6#跟Series一樣,values屬性也會以二維ndarray的形式返回DataFrame中的數據:print frame3.values# [[ nan 1.5]# [ 2.4 1.7]# [ 2.9 3.6]]#如果DataFrame各列的數據類型不同,則值數組的數據類型就會選用能兼容所有列的數據類型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]]

以上這篇對pandas中兩種數據類型Series和DataFrame的區別詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 加查县| 天气| 南投市| 浪卡子县| 日土县| 鹰潭市| 云南省| 海丰县| 沂南县| 如皋市| 保山市| 新干县| 湟中县| 徐汇区| 梁平县| 墨脱县| 奈曼旗| 泌阳县| 高州市| 巧家县| 荣昌县| 南江县| 巫山县| 新安县| 枣阳市| 和平区| 共和县| 蕉岭县| 凌海市| 铜川市| 朝阳市| 双柏县| 岱山县| 长寿区| 潼关县| 肥乡县| 股票| 正宁县| 呼伦贝尔市| 甘德县| 揭阳市|