Python?Pandas?中的數(shù)據(jù)結(jié)構(gòu)詳解
前言:
Pandas有三種數(shù)據(jù)結(jié)構(gòu):Series、DataFrame和Panel。Series類似于數(shù)組;DataFrame類似于表格;Panel可視為Excel的多表單Sheet
1.Series
Series是一種一維數(shù)組對(duì)象,包含一個(gè)值序列,并且包含數(shù)據(jù)標(biāo)簽,稱為索引(index),通過(guò)索引來(lái)訪問(wèn)數(shù)組中的數(shù)據(jù)。
1.1通過(guò)列表創(chuàng)建Series
例1.通過(guò)列表創(chuàng)建
import pandas as pd obj = pd.Series([1,-2,3,4]) #僅由一個(gè)數(shù)組構(gòu)成 print(obj)
輸出:
0 1
1 -2
2 3
3 4
dtype: int64
輸出的第一列為index,第二列為數(shù)據(jù)value。如果創(chuàng)建Series時(shí)沒(méi)有指定index,Pandas會(huì)采用整型數(shù)據(jù)作為該Series的index。也可以使用Python里的索引index和切片slice技術(shù)
例2.創(chuàng)建Series時(shí)指定索引
import pandas as pd i = ["a","c","d","a"] v = [2,4,5,7] t = pd.Series(v,index=i,name="col") print(t)
out:
a 2
c 4
d 5
a 7
Name: col, dtype: int64
盡管創(chuàng)建Series指定了index,實(shí)際上Pandas還是有隱藏的index位置信息。所以Series有兩套描述某條數(shù)據(jù)手段:位置和標(biāo)簽
例3.Series位置和標(biāo)簽的使用
import pandas as pd val = [2,4,5,6] idx1 = range(10,14) idx2 = "hello the cruel world".split() s0 = pd.Series(val) s1 = pd.Series(val,index=idx1) t = pd.Series(val,index=idx2) print(s0.index) print(s1.index) print(t.index) print(s0[0]) print(s1[10]) print('default:',t[0],'label:',t["hello"])
1.2通過(guò)字典創(chuàng)建Series
如果數(shù)據(jù)被存放在一個(gè)Python字典中,也可以直接通過(guò)這個(gè)字典來(lái)創(chuàng)建Series
例4.通過(guò)字典創(chuàng)建Series
import pandas as pd sdata = {'Ohio':35000,'Texass':71000,'Oregon':16000,'Utah':5000} obj = pd.Series(sdata) print(obj)
Ohio 35000
Texass 71000
Oregon 16000
Utah 5000
dtype: int64
如果只傳入一個(gè)字典,則結(jié)果Series中的索引就是原字典的鍵(有序排列)
例5.通過(guò)字典創(chuàng)建Series時(shí)的索引
import pandas as pd sdata = {"a":100,"b":200,"e":300} obj = pd.Series(sdata) print(obj)
a 100
b 200
e 300
dtype: int64
如果字典中的鍵值和指定的索引不匹配,則對(duì)應(yīng)的值時(shí)NaN
例6.鍵值和指定索引不匹配
import pandas as pd sdata = {"a":100,"b":200,"e":300} letter = ["a","b","c","e"] obj = pd.Series(sdata,index=letter) print(obj)
a 100.0
b 200.0
c NaN
e 300.0
dtype: float64
對(duì)于許多應(yīng)用而言,Series重要的一個(gè)功能是:它在算術(shù)運(yùn)算中會(huì)自動(dòng)對(duì)齊不同索引的數(shù)據(jù)
例7.不同索引數(shù)據(jù)的自動(dòng)對(duì)齊
import pandas as pd sdata = {'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000} obj1 = pd.Series(sdata) states = ['California','Ohio','Oregon','Texas'] obj2 = pd.Series(sdata,index=states) print(obj1+obj2)
California NaN
Ohio 70000.0
Oregon 32000.0
Texas 142000.0
Utah NaN
dtype: float64
Series的索引可以通過(guò)賦值的方式就地修改
例8.Series索引的修改
import pandas as pd obj = pd.Series([4,7,-3,2]) obj.index = ['Bob','Steve','Jeff','Ryan'] print(obj)
Bob 4
Steve 7
Jeff -3
Ryan 2
dtype: int64
2.DataFrame
DataFrame是一個(gè)表格型的數(shù)據(jù)結(jié)構(gòu),它含有一組有序的列,每列可以是不同類型的值(數(shù)值、字符串、布爾值等)。DataFrame既有行索引也有列索引,它可以被看作由Series組成的字典(共用同一個(gè)索引)。跟其他類型的數(shù)據(jù)結(jié)構(gòu)相比,DataFrame中面向行和面向列的操作上基本上是平衡的
構(gòu)建DataFrame的方式有很多,最常用的是直接傳入一個(gè)由等長(zhǎng)列表或NumPy數(shù)組組成的字典來(lái)形成DataFrame
例9.DataFrame的創(chuàng)建
import pandas as pd data = { 'name':['張三','李四','王五','小明'], 'sex':['female','female','male','male'], 'year':[2001,2001,2003,2002], 'city':['北京','上海','廣州','北京'] } df = pd.DataFrame(data) print(df)
name sex year city
0 張三 female 2001 北京
1 李四 female 2001 上海
2 王五 male 2003 廣州
3 小明 male 2002 北京
DataFrame會(huì)自動(dòng)加上索引(跟Series一樣),且全部列會(huì)被有序排列。如果指定了列名序列,則DataFrame的列就會(huì)按照指定順序進(jìn)行排列
例10.DataFrame的索引
import pandas as pd data = { 'name':['張三','李四','王五','小明'], 'sex':['female','female','male','male'], 'year':[2001,2001,2003,2002], 'city':['北京','上海','廣州','北京'] } df = pd.DataFrame(data,columns = ['name','year','sex','city']) print(df)
name year sex city
0 張三 2001 female 北京
1 李四 2001 female 上海
2 王五 2003 male 廣州
3 小明 2002 male 北京
跟Series一樣,如果傳入的列在數(shù)據(jù)中找不到,就會(huì)產(chǎn)生NaN值。
例11.DataFrame創(chuàng)建時(shí)的空缺值
import pandas as pd data = { 'name':['張三','李四','王五','小明'], 'sex':['female','female','male','male'], 'year':[2001,2001,2003,2002], 'city':['北京','上海','廣州','北京'] } df = pd.DataFrame(data,columns = ['name','year','sex','city','address']) print(df)
name year sex city address
0 張三 2001 female 北京 NaN
1 李四 2001 female 上海 NaN
2 王五 2003 male 廣州 NaN
3 小明 2002 male 北京 NaN
DataFrame構(gòu)造函數(shù)的columns函數(shù)給出列的名字,index給出label標(biāo)簽
例12.DataFrame構(gòu)建時(shí)指定列名
import pandas as pd data = { 'name':['張三','李四','王五','小明'], 'sex':['female','female','male','male'], 'year':[2001,2001,2003,2002], 'city':['北京','上海','廣州','北京'] } df = pd.DataFrame(data,columns = ['name','year','sex','city','address'],index = ['a','b','c','d']) print(df)
name year sex city address
a 張三 2001 female 北京 NaN
b 李四 2001 female 上海 NaN
c 王五 2003 male 廣州 NaN
d 小明 2002 male 北京 NaN
3.索引對(duì)象
Pandas的索引對(duì)象負(fù)責(zé)管理軸標(biāo)簽和其他元數(shù)據(jù)(例如軸名稱等).構(gòu)建Series或DataFrame時(shí),所用到的任何數(shù)組或其他序列的標(biāo)簽都會(huì)被轉(zhuǎn)換成一個(gè)Index
例13.顯示DataFrame的索引和列
import pandas as pd data = { 'name':['張三','李四','王五','小明'], 'sex':['female','female','male','male'], 'year':[2001,2001,2003,2002], 'city':['北京','上海','廣州','北京'] } df = pd.DataFrame(data,columns = ['name','year','sex','city','address'],index = ['a','b','c','d']) print(df) print(df.index) print(df.columns)
name year sex city address
a 張三 2001 female 北京 NaN
b 李四 2001 female 上海 NaN
c 王五 2003 male 廣州 NaN
d 小明 2002 male 北京 NaN
Index(['a', 'b', 'c', 'd'], dtype='object')
Index(['name', 'year', 'sex', 'city', 'address'], dtype='object')
索引對(duì)象不能進(jìn)行修改,否則會(huì)報(bào)錯(cuò)。不可修改性非常重要,因?yàn)檫@樣才能使Index對(duì)象在多個(gè)數(shù)據(jù)結(jié)構(gòu)之間安全共享
除了長(zhǎng)的像數(shù)組,Index的功能也類似于一個(gè)固定大小的集合
例14.DataFrame的Index
import pandas as pd data = { 'name':['張三','李四','王五','小明'], 'sex':['female','female','male','male'], 'year':[2001,2001,2003,2002], 'city':['北京','上海','廣州','北京'] } df = pd.DataFrame(data,columns = ['name','year','sex','city','address'],index = ['a','b','c','d']) print('name'in df.columns) print('a'in df.index)
True
True
每個(gè)索引都有一些方法和屬性,他們可用于設(shè)置邏輯并回答有關(guān)該索引所包含的數(shù)據(jù)的常見(jiàn)的問(wèn)題。
例15.插入索引值
import pandas as pd data = { 'name':['張三','李四','王五','小明'], 'sex':['female','female','male','male'], 'year':[2001,2001,2003,2002], 'city':['北京','上海','廣州','北京'] } df = pd.DataFrame(data,columns = ['name','year','sex','city','address'],index = ['a','b','c','d']) df.index.insert(1,'w') Index(['a', 'w', 'b', 'c', 'd'], dtype='object')
4.查看DataFrame的常用屬性
DataFrame的基礎(chǔ)屬性有value、index、columns、dtypes、ndim和shape,分別可以獲取DataFrame的元素、索引、列名、類型、維度和形狀。
例16.顯示DataFrame的屬性
import pandas as pd data = { 'name':['張三','李四','王五','小明'], 'sex':['female','female','male','male'], 'year':[2001,2001,2003,2002], 'city':['北京','上海','廣州','北京'] } df = pd.DataFrame(data,columns = ['name','year','sex','city','address'],index = ['a','b','c','d']) print(df) print('信息表的所有值為:\n',df.values) print('信息表的所有列為:\n',df.columns) print('信息表的元素個(gè)數(shù):\n',df.size) print('信息表的維度:\n',df.ndim) print('信息表的形狀:\n',df.shape) #//輸出 name year sex city address a 張三 2001 female 北京 NaN b 李四 2001 female 上海 NaN c 王五 2003 male 廣州 NaN d 小明 2002 male 北京 NaN 信息表的所有值為: [['張三' 2001 'female' '北京' nan] ['李四' 2001 'female' '上海' nan] ['王五' 2003 'male' '廣州' nan] ['小明' 2002 'male' '北京' nan]] 信息表的所有列為: Index(['name', 'year', 'sex', 'city', 'address'], dtype='object') 信息表的元素個(gè)數(shù): 20 信息表的維度: 2 信息表的形狀: (4, 5)
到此這篇關(guān)于Python Pandas 中的數(shù)據(jù)結(jié)構(gòu)詳解的文章就介紹到這了,更多相關(guān)Python Pandas 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Pandas數(shù)據(jù)結(jié)構(gòu)中Series屬性詳解
- Pandas數(shù)據(jù)結(jié)構(gòu)之Series的使用
- Python Pandas學(xué)習(xí)之Pandas數(shù)據(jù)結(jié)構(gòu)詳解
- Pandas數(shù)據(jù)分析多文件批次聚合處理實(shí)例解析
- Pandas數(shù)據(jù)分析常用函數(shù)的使用
- Python?第三方庫(kù)?Pandas?數(shù)據(jù)分析教程
- Python利用Pandas進(jìn)行數(shù)據(jù)分析的方法詳解
- Pandas常用的數(shù)據(jù)結(jié)構(gòu)和常用的數(shù)據(jù)分析技術(shù)
相關(guān)文章
python調(diào)用chrome實(shí)現(xiàn)網(wǎng)頁(yè)自動(dòng)操作過(guò)程
這篇文章主要介紹了python調(diào)用chrome實(shí)現(xiàn)網(wǎng)頁(yè)自動(dòng)操作,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11Pyqt5 實(shí)現(xiàn)跳轉(zhuǎn)界面并關(guān)閉當(dāng)前界面的方法
今天小編就為大家分享一篇Pyqt5 實(shí)現(xiàn)跳轉(zhuǎn)界面并關(guān)閉當(dāng)前界面的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06pycharm如何使用anaconda中的各種包(操作步驟)
這篇文章主要介紹了pycharm如何使用anaconda中的各種包,本文通過(guò)操作步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07基于Python+Matplotlib實(shí)現(xiàn)直方圖的繪制
Matplotlib是Python的繪圖庫(kù),它能讓使用者很輕松地將數(shù)據(jù)圖形化,并且提供多樣化的輸出格式。本文將為大家介紹如何用matplotlib繪制直方圖,感興趣的朋友可以學(xué)習(xí)一下2022-04-04python 讀取攝像頭數(shù)據(jù)并保存的實(shí)例
今天小編就為大家分享一篇python 讀取攝像頭數(shù)據(jù)并保存的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08Python使用pyodbc訪問(wèn)數(shù)據(jù)庫(kù)操作方法詳解
這篇文章主要介紹了Python使用pyodbc訪問(wèn)數(shù)據(jù)庫(kù)操作方法,結(jié)合實(shí)例形式詳細(xì)分析了Python基于pyodbc針對(duì)數(shù)據(jù)庫(kù)的連接、查詢、插入、修改、刪除等操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-07-07Python爬蟲(chóng)抓取代理IP并檢驗(yàn)可用性的實(shí)例
今天小編就為大家分享一篇Python爬蟲(chóng)抓取代理IP并檢驗(yàn)可用性的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05python使用tkinter實(shí)現(xiàn)自定義多參數(shù)對(duì)話框
Tkinter模塊是Python標(biāo)準(zhǔn)庫(kù)中的一部分,用于創(chuàng)建圖形用戶界面(GUI)應(yīng)用程序,它提供了一組工具和組件,用于創(chuàng)建窗口、按鈕、文本框等用戶界面元素,并且可以響應(yīng)用戶的輸入,本文將給大家講講python如何使用tkinter實(shí)現(xiàn)自定義多參數(shù)對(duì)話框2023-08-08