中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-08-22 19:07:59 來源:腳本之家 閱讀:349 作者:jolingcome 欄目:開發技術

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 s2
obj1=s2.values
# print obj1
obj2=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  3
print 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'] #輸出結果:-5
print 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  3
print 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: bool
print pd.notnull(obj4)
#輸出結果如下:
# California  False
# Ohio      True
# Oregon     True
# Texax     True
# dtype: bool
print 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: float64
print 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: int64
obj2['Bob']=15
print obj2
#輸出結果如下:
# Bob    15
# Steven   7
# Jeff   -5
# Ryan    3
# dtype: int64
print 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']=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列值設為None
a.iloc[4,0]=None #取第五行第1列值設為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,適當改動后,保存到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 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
#輸出的結果如下:
#  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 NaN
print 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: object
print 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
#賦值一個Series
val=Series([-1.2,-1.5,-1.7],index=['two','four','five'])
frame2['debt']=val
print 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,否則返回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
#返回結果如下:
#    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的列
#輸出結果如下: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.6
print DataFrame(pop,index=[2001,2002,2003])
#輸出結果如下:
#    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)
#輸出結果如下:
#    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的區別詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

喀什市| 磐石市| 吴忠市| 鱼台县| 嘉兴市| 湄潭县| 九寨沟县| 柳州市| 镇康县| 双牌县| 乐安县| 成武县| 彭阳县| 石狮市| 交口县| 恩施市| 台湾省| 天全县| 博乐市| 辽阳市| 化州市| 道孚县| 夏河县| 南宫市| 嘉荫县| 翼城县| 固阳县| 巴马| 通渭县| 宜川县| 长顺县| 个旧市| 惠水县| 青州市| 西城区| 股票| 旬邑县| 来宾市| 张家港市| 环江| 通河县|