iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0
Python

進擊的Python系列 第 19

Day18-Dataframe

  • 分享至 

  • xImage
  •  

感謝里維兵長救了我

https://ithelp.ithome.com.tw/upload/images/20240823/20163257Zjb0O2y5p4.png
圖片來源:(https://forum.gamer.com.tw/Co.php?bsn=43473&sn=52635)

Pandas DataFrame

是一個二維標籤陣列,類似 Excel 試算表或 SQL 資料庫中的表格。由多個 Series 組成,每個 Series 代表一列,而每一列可以有不同的數據類型。DataFrame 是 Pandas 中最常用的數據結構,用於表示複雜的數據集

創建DataFrame

import pandas as pd

# 從字典創建
data = {'Column1': [1, 2, 3], 'Column2': [4, 5, 6]}
df = pd.DataFrame(data)
print(df)

輸出
Column1  Column2
0        1        4
1        2        5
2        3        6

# 從列表的列表創建
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
df = pd.DataFrame(data, columns=['A', 'B', 'C'])
print(df)

輸出
A  B  C
0  1  2  3
1  4  5  6
2  7  8  9

# 從 NumPy array 創建
import numpy as np
data = np.array([[1, 2, 3], [4, 5, 6]])
df = pd.DataFrame(data, columns=['X', 'Y', 'Z'])
print(df)

輸出
X  Y  Z
0  1  2  3
1  4  5  6

DataFrame屬性與方法

shape 返回 DataFrame 形狀,即行數和列數。
index 返回 DataFrame 索引(行標籤)
columns 返回 DataFrame 列名
dtypes 返回 DataFrame 中每一列數據類型
head() 返回 DataFrame 前幾行
tail() 返回 DataFrame 後幾行
describe() 返回 DataFrame 描述性統計量
info() 顯示 DataFrame 摘要信息
data = {'Column1': [1, 2, 3], 'Column2': [4, 5, 6]}
df = pd.DataFrame(data)

print(df.shape)

# 輸出
(3, 2)

print(df.index)

# 輸出
RangeIndex(start=0, stop=3, step=1)

print(df.columns)

# 輸出
Index(['Column1', 'Column2'], dtype='object')

print(df.dtypes)

# 輸出
Column1    int64
Column2    int64
dtype: object

print(df.head())

# 輸出
Column1  Column2
0        1        4
1        2        5
2        3        6

print(df.tail())

# 輸出
Column1  Column2
0        1        4
1        2        5
2        3        6

print(df.describe())

# 輸出
Column1  Column2
count      3.0      3.0
mean       2.0      5.0
std        1.0      1.0
min        1.0      4.0
25%        1.5      4.5
50%        2.0      5.0
75%        2.5      5.5
max        3.0      6.0

print(df.info())

# 輸出
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 2 columns):
 #   Column   Non-Null Count  Dtype
---  ------   --------------  -----
 0   Column1  3 non-null      int64
 1   Column2  3 non-null      int64
dtypes: int64(2)
memory usage: 176.0 bytes
None

DataFrame選取與操作

  • 選取列:使用列名或索引號
  • 選取行:使用行標籤或索引號
  • 切片:使用 iloc 或 loc 方法進行切片
  • 布林索引:使用布林表達式來篩選數據
data = {'Column1': [1, 2, 3], 'Column2': [4, 5, 6]}
df = pd.DataFrame(data)
# 選取一列
print(df['Column1'])

輸出
0    1
1    2
2    3
Name: Column1, dtype: int64

# 選取多列
print(df[['Column1', 'Column2']])

輸出
Column1  Column2
0        1        4
1        2        5
2        3        6

# 選取前兩行
print(df.head(2))

輸出
Column1  Column2
0        1        4
1        2        5

# 選取索引為1到3的行
print(df.iloc[1:4])

輸出
Column1  Column2
1        2        5
2        3        6

# 篩選出 Column1 大於 2 的行
print(df[df['Column1'] > 2])

輸出
Column1  Column2
2        3        6

DataFrame常用操作

添加列 使用 ['new_column'] = values 的方式添加新列
刪除列 使用 drop() 方法刪除列
重命名列 使用 rename() 方法重命名列
排序 使用 sort_values() 方法根據指定列進行排序
聚合 使用 groupby() 方法進行分組聚合
合併 使用 merge()concat() 方法合併 DataFrame
data = {'Column1': [1, 2, 3], 'NewColumn': [4, 5, 6]}
df = pd.DataFrame(data)
# 添加一列
df['NewColumn'] = df['Column1'] * 2
print(df)

輸出
Column1  NewColumn
0        1          2
1        2          4
2        3          6

# 刪除 Column1 列
df = df.drop('Column1', axis=1)
print(df)

輸出
NewColumn
0          4
1          5
2          6


# 重命名 Column2 為 NewName
data = {'Column1': [1, 2, 3], 'Column2': [4, 5, 6]}
df = pd.DataFrame(data)
df = df.rename(columns={'Column2': 'NewName'})
print(df)

輸出
Column1  NewName
0        1        4
1        2        5
2        3        6

# 根據 Column1 升序排序
df = df.sort_values('Column1')
print(df)

輸出
Column1  Column2
0        1        4
1        2        5
2        3        6

DataFrame應用

  • 數據分析:可以用各種數據分析任務,例如:數據清洗、探索性數據分析、統計分析
  • 機器學習:可以作機器學習模型輸入數據
  • 資料庫操作:可以與 SQL 資料庫進行交互

結論

Pandas DataFrame 是 Python 數據分析中非常重要的工具,它提供豐富的功能用於處理和分析表格型數據。通過 DataFrame,可以方便地對數據進行操作、分析和可視化


上一篇
Day17-Series(歐魯)
下一篇
Day19-NumPy(佩托拉)
系列文
進擊的Python36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言