iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0

  上一篇文章中,介紹了 Pandas 中的 Series 結構,今天要和大家聊聊 Pandas 中最常使用的資料結構——DataFrame,其概念和操作都和 Series 有些差異,剛開始學習很容易一頭霧水,趁著這次的機會,一次整理好和大家一起分享!內容包含:

  1. 介紹 DataFrame
  2. 創建 DataFrame 物件
  3. 訪問 DataFrame 資料
  4. 瞭解 DataFrame 屬性

■ 簡介|DataFrame

  DataFrame 在 Pandas 中適用於處理「雙維度」的資料,是由列(row)和欄(column)組成的「二維陣列」,能將複雜的數據以易於閱讀的結構化資料呈現,如同 Excel 表格一樣,經常應用於讀取 CSV 檔或資料庫,因此成為 Pandas 中最常用的數據結構!
https://ithelp.ithome.com.tw/upload/images/20230919/20162238ZMnhYxu04p.jpg

■ 創建 DataFrame 物件

使用 DataFrame( ) 語法,搭配 Python 的字典(dict)創建 DataFrame 物件。
舉例:創建名為data,具有姓名、居住縣市、數學成績的 DataFrame 物件

import pandas as pd
data = {'name':['Alan','Chris','Dora','Elsa','Ida'],
		'city':['Taipei','Tainan','Yilan','Taichung','Hsinchu'],
	    'Math':[76,92,63,88,79]}
df = pd.DataFrame(data)
print(df)

輸出結果:
https://ithelp.ithome.com.tw/upload/images/20230919/20162238Jy1OF4JRth.png

■ 訪問 DataFrame 資料

  DataFrame 的資料通常具有多筆資料(row)、多個欄位(column),同時擁有「行索引」和「列索引」 ,因此操作上需事先考量要取得的資料屬於「特定行」or「特定列」or「指定資料」!

1. 取得「特定行」 → 使用「索引值」
舉例:在名為 data 的 DataFrame 中,取得第 2、3 行資料 & 第 3 行資料

import pandas as pd
data = {'name':['Alan','Chris','Dora','Elsa','Ida'],
		'city':['Taipei','Tainan','Yilan','Taichung','Hsinchu'],
	    'Math':[76,92,63,88,79]}
df = pd.DataFrame(data)
print(df)         # 完整data
print('--------------------')
print(df[1:3])    # 取第2、3行資料
print('--------------------')
print(df[2:3])    # 取第3行資料

輸出結果:
https://ithelp.ithome.com.tw/upload/images/20230919/20162238j51ShEDukS.png

2. 取得「特定列」 → 使用「欄位名稱」
舉例:在名為 data 的 DataFrame 中,取得單一欄位或多欄位資料

import pandas as pd
data = {'name':['Alan','Chris','Dora','Elsa','Ida'],
		'city':['Taipei','Tainan','Yilan','Taichung','Hsinchu'],
	    'Math':[76,92,63,88,79]}
df = pd.DataFrame(data)
print(df[['name']])     # 單獨取name欄位資料
print('--------------------')
print(df[['name','city']])  # 同時取name和city欄位資料

注意:print 結果時,記得使用兩個中括號,以呈現 DataFrame 格式!

輸出結果:
https://ithelp.ithome.com.tw/upload/images/20230919/20162238sLo1W36Dg4.png

3. 取得「指定資料」 → 使用「loc、iloc」
(1) 使用 loc [ 行索引值 , 欄位名稱 ]
舉例:在名為 data 的 DataFrame 中,取得行索引值 2、3 中 name 和 Math 的資料

import pandas as pd
data = {'name':['Alan','Chris','Dora','Elsa','Ida'],
		'city':['Taipei','Tainan','Yilan','Taichung','Hsinchu'],
	    'Math':[76,92,63,88,79]}
df = pd.DataFrame(data)
print(df)               # 完整data
print('-------------------------')
print(df.loc[2,'name'])             # 單獨取索引值為2的name欄位資料
print('-------------------------')
print(df.loc[[2,3],['name','Math']]) # 同時取索引值為2、3的name和Math欄位資料

輸出結果:
https://ithelp.ithome.com.tw/upload/images/20230919/20162238td4Q8kIJQl.png

(2) 使用 iloc [ 行索引值 , 列索引值 ]
舉例:在名為 data 的 DataFrame 中,取得行索引值 2、3 中,列索引值 0、2 的資料

import pandas as pd
data = {'name':['Alan','Chris','Dora','Elsa','Ida'],
		'city':['Taipei','Tainan','Yilan','Taichung','Hsinchu'],
	    'Math':[76,92,63,88,79]}
df = pd.DataFrame(data)
print(df)               # 完整data
print('-------------------------')
print(df.iloc[2,0])                 # 單獨取行索引值為2,列索引值為0的資料
print('-------------------------')
print(df.iloc[[2,3],[0,2]])         # 同時取行索引值為2、3,列索引值為0、2的資料

輸出結果:
https://ithelp.ithome.com.tw/upload/images/20230919/20162238td4Q8kIJQl.png

▲ 這裡可以發現,使用 loc[]iloc[] 的差異點在於中括號後者參數為「欄位名稱」還是「列索引值」!

若想自行定義索引值的話,可以用 index 參數進行設定
舉例:創建名為 data 的 DataFrame 物件,設定索引值為 No1 至 No5

import pandas as pd
data = {'name':['Alan','Chris','Dora','Elsa','Ida'],
		'city':['Taipei','Tainan','Yilan','Taichung','Hsinchu'],
	    'Math':[76,92,63,88,79]}
df = pd.DataFrame(data,index=['No1','No2','No3','No4','No5'])
print(df)

輸出結果:
https://ithelp.ithome.com.tw/upload/images/20230919/20162238YTb238MmP5.png

■ 瞭解 DataFrame 屬性

  1. DataFrame.values:以 list 返回 DataFrame 中的資料
  2. DataFrame.size:返回 DataFrame 中的元素數量
  3. DataFrame.index:返回 DataFrame 的行索引
  4. DataFrame.columns:返回 DataFrame 的列索引
  5. DataFrame.dtypes:返回 DataFrame 的數據型態
  6. DataFrame.shape:返回 DataFrame 的數據形狀

舉例:創建名為 data 的 DataFrame 物件,並觀察其屬性

import pandas as pd
data = {'name':['Alan','Chris','Dora','Elsa','Ida'],
				'city':['Taipei','Tainan','Yilan','Taichung','Hsinchu'],
	      'Math':[76,92,63,88,79]}
df = pd.DataFrame(data)
print(df.values)  # DataFrame 中的資料
print('-------------------------')
print(df.size)      # DataFrame 中元素數量
print('-------------------------')
print(df.index)     # DataFrame 中的行索引
print('-------------------------')
print(df.columns)   # DataFrame 中的列索引
print('-------------------------')
print(df.dtypes)    # DataFrame 中各欄位型態
print('-------------------------')
print(df.shape)     # DataFrame 的數據形狀

輸出結果:
https://ithelp.ithome.com.tw/upload/images/20230919/20162238bd4nPV40gF.png
▲ (5,3) 表示為有5行、3列的二維結構!

■ 結語

耶!結束 Pandas 的兩種資料結構介紹了!尤其 DataFrame 的整理真的耗費好多時間,希望大家能看得明白,更認識 DataFrame!如果有任何不理解、錯誤或建議的話,歡迎留言給我!喜歡的話,也歡迎按讚訂閱!明天開始將進入資料處理的各種操作,繼續加油!Fighting~~
  
我是 Eva,一位正在努力跨進資料科學領域的女子!我們下一篇文章見!Bye Bye~
【本篇文章將同步更新於個人的 Medium


上一篇
Day 3|資料結構 - Series 篇
下一篇
Day 5|檔案路徑與存取外部資料
系列文
Pandas|資料前處理工具 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言