一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

pandas中的兩種數(shù)據(jù)類型Series和DataFrame區(qū)別

 Veecoylb85u7u6 2019-08-24

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 s2obj1=s2.values# print obj1obj2=s2.index# print obj2# print s2[s2>4]# print s2['b']

  1. 1.Series 它是有索引,如果我們未指定索引,則是以數(shù)字自動(dòng)生成。
  2. 下面是一些例子:
  3. obj=Series([4,7,-5,3])
  4. print obj
  5. #輸出結(jié)果如下:
  6. # 0 4
  7. # 1 7
  8. # 2 -5
  9. # 3 3
  10. print obj.values #取出它的值
  11. #[ 4 7 -5 3]
  12. print obj.index #取出索引值
  13. #輸出結(jié)果如下:
  14. # RangeIndex(start=0, stop=4, step=1)
  15. obj2=Series([4,7,-5,3],index=['d','b','a','c'])
  16. print obj2
  17. #輸出結(jié)果如下:
  18. # d 4
  19. # b 7
  20. # a -5
  21. # c 3
  22. #可以通過索引的方式選擇Series中的單個(gè)或一組值
  23. print obj2['a'] #輸出結(jié)果:-5
  24. 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ù)等)都會保留索引和值之間的鏈接
  1. print obj2[obj2>0] #取出>0的值
  2. #輸出結(jié)果如下:
  3. # d 4
  4. # b 7
  5. # c 3
  6. print obj2*2
  7. #輸出結(jié)果如下:
  8. # d 8
  9. # b 14
  10. # a -10
  11. # 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.
  1. sdata={'Ohio':35000,'Texax':71000,'Oregon':16000,'Utah':5000}
  2. obj3=Series(sdata)
  3. print obj3
  4. #輸出結(jié)果如下:
  5. # Ohio 35000
  6. # Oregon 16000
  7. # Texax 71000
  8. # Utah 5000
  9. #注:如果只傳入一個(gè)字典,則結(jié)果Series中的索引就是原字典的鍵(有序排列)
  10. states=['California','Ohio','Oregon','Texax']
  11. obj4=Series(sdata,index=states) #將sdata字典創(chuàng)建Series,索引用states來創(chuàng)建
  12. print obj4
  13. #California在sdata中沒有相應(yīng)的值,故是NaN缺省值
  14. # California NaN
  15. # Ohio 35000.0
  16. # Oregon 16000.0
  17. # Texax 71000.0

4)pandas中的isnull和notnull函數(shù)可以用于檢測缺失數(shù)據(jù),
Series也有類似的方法
  1. print pd.isnull(obj4)
  2. #輸出結(jié)果如下:
  3. # California True
  4. # Ohio False
  5. # Oregon False
  6. # Texax False
  7. # dtype: bool
  8. print pd.notnull(obj4)
  9. #輸出結(jié)果如下:
  10. # California False
  11. # Ohio True
  12. # Oregon True
  13. # Texax True
  14. # dtype: bool
  15. print obj4.isnull() #Series的isnull方法
  16. #輸出結(jié)果如下:
  17. # California True
  18. # Ohio False
  19. # Oregon False
  20. # Texax False
  21. # dtype: bool
5)Series最重要的一個(gè)功能是:它在算術(shù)運(yùn)算中會自動(dòng)對齊不同索引的數(shù)據(jù)。
  1. print obj3,obj4
  2. # Ohio 35000
  3. # Oregon 16000
  4. # Texax 71000
  5. # Utah 5000
  6. # dtype: int64
  7. #
  8. # California NaN
  9. # Ohio 35000.0
  10. # Oregon 16000.0
  11. # Texax 71000.0
  12. # dtype: float64
  13. print obj3+obj4
  14. # California NaN
  15. # Ohio 70000.0
  16. # Oregon 32000.0
  17. # Texax 142000.0
  18. # Utah NaN
  19. # dtype: float64

6)Series對象本身及其索引都有一個(gè)name屬性,該屬性跟pandas其他的關(guān)鍵功能關(guān)系非常密切
  1. obj4.name='population'
  2. obj4.index.name='state'
  3. print obj4
  4. #輸出如下:加上state和name
  5. # state
  6. # California NaN
  7. # Ohio 35000.0
  8. # Oregon 16000.0
  9. # Texax 71000.0
  10. # Name: population, dtype: float64

7)Series的索引可以通過賦值的方式就地修改
  1. obj2.index=['Bob','Steven','Jeff','Ryan']
  2. print obj2
  3. #輸出結(jié)果如下:
  4. # Bob 4
  5. # Steven 7
  6. # Jeff -5
  7. # Ryan 3
  8. # dtype: int64
  9. obj2['Bob']=15
  10. print obj2
  11. #輸出結(jié)果如下:
  12. # Bob 15
  13. # Steven 7
  14. # Jeff -5
  15. # Ryan 3
  16. # dtype: int64
  17. print obj2['Bob'].values #沒有這種表示法,報(bào)錯(cuò)。因?yàn)轭愃谱值淙≈?,直接取鍵值即可
  18. 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']=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列值設(shè)為Nonea.iloc[4,0]=None #取第五行第1列值設(shè)為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,適當(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ù)組組成的字典
  1. import numpy as np
  2. from numpy import random
  3. import matplotlib.pyplot as plt
  4. from numpy.linalg import inv,qr
  5. from pandas import Series,DataFrame
  6. import pandas as pd
  1. data={'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
  2. 'year':[2000,2001,2002,2001,2002],
  3. 'pop':[1.5,1.7,3.6,2.4,2.9]}
  4. frame=DataFrame(data)
  5. print frame
  6. #輸出的結(jié)果如下:
  7. # pop state year
  8. # 0 1.5 Ohio 2000
  9. # 1 1.7 Ohio 2001
  10. # 2 3.6 Ohio 2002
  11. # 3 2.4 Nevada 2001
  12. # 4 2.9 Nevada 2002
(2)如果指定了列序列,則DataFrame的列就會按照指定的順序進(jìn)行排序
  1. frame1=DataFrame(data,columns=['year','state','pop'])
  2. print frame1
  3. #輸出的結(jié)果如下:
  4. # year state pop
  5. # 0 2000 Ohio 1.5
  6. # 1 2001 Ohio 1.7
  7. # 2 2002 Ohio 3.6
  8. # 3 2001 Nevada 2.4
  9. # 4 2002 Nevada 2.9

(3)跟Series一樣,如果傳入的列在數(shù)據(jù)中找不到,就會產(chǎn)生NA值
  1. frame2=DataFrame(data,columns=['year','state','pop','debt'],
  2. index=['one','two','three','four','five']) #column列的索引,index是行的索引
  3. print frame2
  4. #輸出的結(jié)果如下:
  5. # year state pop debt
  6. # one 2000 Ohio 1.5 NaN
  7. # two 2001 Ohio 1.7 NaN
  8. # three 2002 Ohio 3.6 NaN
  9. # four 2001 Nevada 2.4 NaN
  10. # five 2002 Nevada 2.9 NaN
  11. print frame2.columns #輸出列的索引
  12. #輸出結(jié)果如下:
  13. # Index([u'year', u'state', u'pop', u'debt'], dtype='object')

(4)類似字典標(biāo)記的方式或?qū)傩缘姆绞?,可以將DataFrame的列獲取為一個(gè)Series.
  1. print frame2['state'] #取出列索引為state的列的數(shù)據(jù)
  2. #輸出結(jié)果如下:
  3. # one Ohio
  4. # two Ohio
  5. # three Ohio
  6. # four Nevada
  7. # five Nevada
  8. # Name: state, dtype: object
  9. print frame2.year
  10. #輸出結(jié)果如下:
  11. # one 2000
  12. # two 2001
  13. # three 2002
  14. # four 2001
  15. # five 2002
  16. # Name: year, dtype: int64

(5)返回的Series擁有原DataFrame相同的索引,且其name屬性也已經(jīng)被相應(yīng)地設(shè)置好了。行也可以通過位置或名稱的方式進(jìn)行獲取
比如用索引字段ix,ix是取行的索引
  1. print frame2.ix['three']
  2. #輸出的結(jié)果如下:
  3. # year 2002
  4. # state Ohio
  5. # pop 3.6
  6. # debt NaN
  7. # Name: three, dtype: object

(6)可以通過賦值的方式進(jìn)行修改。
  1. # frame2['debt']=16.5 #debt列全為16.5
  2. # print frame2
  3. #輸出結(jié)果如下:
  4. # year state pop debt
  5. # one 2000 Ohio 1.5 16.5
  6. # two 2001 Ohio 1.7 16.5
  7. # three 2002 Ohio 3.6 16.5
  8. # four 2001 Nevada 2.4 16.5
  9. # five 2002 Nevada 2.9 16.5
  10. #將列表或數(shù)組賦值給某個(gè)列時(shí),其長度必須跟DataFrame的長度相匹配。
  11. #如果賦值的是一個(gè)Series,就會精確匹配DataFrame的索引,所有的空位都將被填上缺失值。
  12. frame2['debt']=np.arange(5.)
  13. print frame2
  14. #輸出結(jié)果如下:
  15. # year state pop debt
  16. # one 2000 Ohio 1.5 0.0
  17. # two 2001 Ohio 1.7 1.0
  18. # three 2002 Ohio 3.6 2.0
  19. # four 2001 Nevada 2.4 3.0
  20. # five 2002 Nevada 2.9 4.0
  21. #賦值一個(gè)Series
  22. val=Series([-1.2,-1.5,-1.7],index=['two','four','five'])
  23. frame2['debt']=val
  24. print frame2
  25. #輸出結(jié)果如下:不在index中的索引的值都賦了Nan
  26. # year state pop debt
  27. # one 2000 Ohio 1.5 NaN
  28. # two 2001 Ohio 1.7 -1.2
  29. # three 2002 Ohio 3.6 NaN
  30. # four 2001 Nevada 2.4 -1.5
  31. # five 2002 Nevada 2.9 -1.7
  32. #為不存在的列賦值會創(chuàng)建出一個(gè)新列。關(guān)鍵字del用于刪除列。
  33. frame2['eastern']=frame2.state=='Ohio' #沒有eastern列,固會自動(dòng)增加一列
  34. #frame2.state=='Ohio'如果等于則返回True,否則返回False
  35. print frame2
  36. # year state pop debt eastern
  37. # one 2000 Ohio 1.5 NaN True
  38. # two 2001 Ohio 1.7 -1.2 True
  39. # three 2002 Ohio 3.6 NaN True
  40. # four 2001 Nevada 2.4 -1.5 False
  41. # five 2002 Nevada 2.9 -1.7 False
  42. del frame2['eastern'] #刪除eastern列
  43. print frame2
  44. #返回結(jié)果如下:
  45. # year state pop debt
  46. # one 2000 Ohio 1.5 NaN
  47. # two 2001 Ohio 1.7 -1.2
  48. # three 2002 Ohio 3.6 NaN
  49. # four 2001 Nevada 2.4 -1.5
  50. # five 2002 Nevada 2.9 -1.7
  51. print frame2.columns #查看frame2的列
  52. #輸出結(jié)果如下:Index([u'year', u'state', u'pop', u'debt'], dtype='object')
(7)另一種常見的數(shù)據(jù)形式是嵌套字典(也就是字典的字典)
  1. pop={'Nevada':{2001:2.4,2002:2.9},
  2. 'Ohio':{2000:1.5,2001:1.7,2002:3.6}}
  3. frame3=DataFrame(pop)
  4. print frame3
  5. #輸出的結(jié)果如下:
  6. # Nevada Ohio
  7. # 2000 NaN 1.5
  8. # 2001 2.4 1.7
  9. # 2002 2.9 3.6
  10. #可以對frame進(jìn)行轉(zhuǎn)置
  11. print frame3.T
  12. #輸出結(jié)果如下:
  13. # 2000 2001 2002
  14. # Nevada NaN 2.4 2.9
  15. # Ohio 1.5 1.7 3.6
  16. print DataFrame(pop,index=[2001,2002,2003])
  17. #輸出結(jié)果如下:
  18. # Nevada Ohio
  19. # 2001 2.4 1.7
  20. # 2002 2.9 3.6
  21. # 2003 NaN NaN
  22. pdata={'Ohio':frame3['Ohio'][:-1],
  23. 'Nevada':frame3['Nevada'][:2]}
  24. print DataFrame(pdata)
  25. #輸出結(jié)果如下:
  26. # Nevada Ohio
  27. # 2000 NaN 1.5
  28. # 2001 2.4 1.7

可以輸入給DataFrame構(gòu)造器的數(shù)據(jù):
  1. 二維ndarray 數(shù)據(jù)矩陣,還可以傳入行標(biāo)和列標(biāo)
  2. 由數(shù)組、列表或元組組成的字典 每個(gè)序列會變成DataFrame的一列,所有序列的長度必須相同
  3. Numpy的結(jié)構(gòu)化/記錄數(shù)組 類似于“由數(shù)組組成的字典”
  4. 由Series組成的字典 每個(gè)Series會成為一列。如果沒顯式指定索引,由各Series的索引會被合
  5. 并成結(jié)果的行索引
  6. 由字典組成的字典 各內(nèi)層字典會成為一列。鍵會被合并成結(jié)果的行索引,跟“由Series組成的字典”
  7. 的情況一樣
  8. 字典或Series的列表 各項(xiàng)將會成為DataFrame的一行。字典鍵或Series索引的并集將會成為DataFrame
  9. 的列標(biāo)
  10. 由列表或元組組成的列表 類似于“二維ndarray”
  11. 另一個(gè)DataFrame 該DataFrame的索引將會被沿用,除非顯式指定了其它索引
  12. Numpy的MaskedArray 類似于'二維ndarray'的情況,只是掩碼值在結(jié)果DataFrame會變成NA/缺失值
  1. #如果設(shè)置了DataFrame的index和columns的name屬性,則這些信息也會被顯示出來:
  2. frame3.index.name='year';
  3. frame3.columns.name='state'
  4. print frame3
  5. #輸出結(jié)果如下:
  6. # state Nevada Ohio
  7. # year
  8. # 2000 NaN 1.5
  9. # 2001 2.4 1.7
  10. # 2002 2.9 3.6
  11. #跟Series一樣,values屬性也會以二維ndarray的形式返回DataFrame中的數(shù)據(jù):
  12. print frame3.values
  13. # [[ nan 1.5]
  14. # [ 2.4 1.7]
  15. # [ 2.9 3.6]]
  16. #如果DataFrame各列的數(shù)據(jù)類型不同,則值數(shù)組的數(shù)據(jù)類型就會選用能兼容所有列的數(shù)據(jù)類型
  17. print frame2.values
  18. # [[2000 'Ohio' 1.5 nan]
  19. # [2001 'Ohio' 1.7 -1.2]
  20. # [2002 'Ohio' 3.6 nan]
  21. # [2001 'Nevada' 2.4 -1.5]
  22. # [2002 'Nevada' 2.9 -1.7]]

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    精品国产亚洲一区二区三区| 日本最新不卡免费一区二区| 嫩呦国产一区二区三区av| 东京热加勒比一区二区| 久久精品亚洲精品国产欧美| 欧美欧美日韩综合一区| 欧美黑人在线精品极品| 欧美激情区一区二区三区| 日韩人妻免费视频一专区 | 黄片在线免费观看全集| 男人和女人黄 色大片| 精品综合欧美一区二区三区| 欧美日韩精品综合在线| 日韩欧美综合中文字幕| 亚洲精选91福利在线观看| 欧美三级大黄片免费看| 国产成人精品午夜福利| 日韩日韩欧美国产精品| 欧美午夜视频免费观看| 亚洲精品伦理熟女国产一区二区| 亚洲最新av在线观看| 国产精品视频一级香蕉| 国产精品欧美在线观看| 亚洲香艳网久久五月婷婷| 麻豆蜜桃星空传媒在线观看| 真实偷拍一区二区免费视频| 人妻少妇系列中文字幕| 精品国产av一区二区三区不卡蜜 | 日韩高清一区二区三区四区| 成人欧美一区二区三区视频| 在线中文字幕亚洲欧美一区| 熟女白浆精品一区二区| 午夜福利92在线观看| 亚洲免费黄色高清在线观看| 亚洲熟妇中文字幕五十路| 99久久免费看国产精品| 亚洲av又爽又色又色| 国产精品午夜视频免费观看| 国产欧美一区二区三区精品视 | 亚洲欧美黑人一区二区| 九九热精彩视频在线播放 |