<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
前言:
Pandas有三種資料結構:Series、DataFrame和Panel。Series類似於陣列;DataFrame類似於表格;Panel可視為Excel的多表單Sheet
Series是一種一維陣列物件,包含一個值序列,並且包含資料標籤,稱為索引(index),通過索引來存取陣列中的資料。
例1.通過列表建立
import pandas as pd obj = pd.Series([1,-2,3,4]) #僅由一個陣列構成 print(obj)
輸出:
0 1
1 -2
2 3
3 4
dtype: int64
輸出的第一列為index,第二列為資料value。如果建立Series時沒有指定index,Pandas會採用整型資料作為該Series的index。也可以使用Python裡的索引index和切片slice技術
例2.建立Series時指定索引
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
儘管建立Series指定了index,實際上Pandas還是有隱藏的index位置資訊。所以Series有兩套描述某條資料手段:位置和標籤
例3.Series位置和標籤的使用
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"])
如果資料被存放在一個Python字典中,也可以直接通過這個字典來建立Series
例4.通過字典建立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
如果只傳入一個字典,則結果Series中的索引就是原字典的鍵(有序排列)
例5.通過字典建立Series時的索引
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
如果字典中的鍵值和指定的索引不匹配,則對應的值時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
對於許多應用而言,Series重要的一個功能是:它在算術運算中會自動對齊不同索引的資料
例7.不同索引資料的自動對齊
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的索引可以通過賦值的方式就地修改
例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
DataFrame是一個表格型的資料結構,它含有一組有序的列,每列可以是不同型別的值(數值、字串、布林值等)。DataFrame既有行索引也有列索引,它可以被看作由Series組成的字典(共用同一個索引)。跟其他型別的資料結構相比,DataFrame中面向行和麵向列的操作上基本上是平衡的
構建DataFrame的方式有很多,最常用的是直接傳入一個由等長列表或NumPy陣列組成的字典來形成DataFrame
例9.DataFrame的建立
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會自動加上索引(跟Series一樣),且全部列會被有序排列。如果指定了列名序列,則DataFrame的列就會按照指定順序進行排列
例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一樣,如果傳入的列在資料中找不到,就會產生NaN值。
例11.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']) print(df)
name year sex city address
0 張三 2001 female 北京 NaN
1 李四 2001 female 上海 NaN
2 王五 2003 male 廣州 NaN
3 小明 2002 male 北京 NaN
DataFrame建構函式的columns函數給出列的名字,index給出label標籤
例12.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)
name year sex city address
a 張三 2001 female 北京 NaN
b 李四 2001 female 上海 NaN
c 王五 2003 male 廣州 NaN
d 小明 2002 male 北京 NaN
Pandas的索引物件負責管理軸標籤和其他後設資料(例如軸名稱等).構建Series或DataFrame時,所用到的任何陣列或其他序列的標籤都會被轉換成一個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')
索引物件不能進行修改,否則會報錯。不可修改性非常重要,因為這樣才能使Index物件在多個資料結構之間安全共用
除了長的像陣列,Index的功能也類似於一個固定大小的集合
例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
每個索引都有一些方法和屬性,他們可用於設定邏輯並回答有關該索引所包含的資料的常見的問題。
例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')
DataFrame的基礎屬性有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('資訊表的元素個數: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') 資訊表的元素個數: 20 資訊表的維度: 2 資訊表的形狀: (4, 5)
到此這篇關於Python Pandas 中的資料結構詳解的文章就介紹到這了,更多相關Python Pandas 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45