大家好!歡迎來到數據新手村的第十七天。昨天學會了如何創建與操作 Pandas DataFrame,但真實世界的數據,很少是手動在程式碼裡建立的,它們通常存放在外部檔案中。
今天,我們將學習數據分析流程的第一步:讀取資料。將使用 Pandas 強大的 read_csv()
函式,正式將我們的 Olist 數據集載入到 DataFrame 中,準備開始真正的分析!
pd.read_csv()
- 開啟數據世界的大門pd.read_csv()
是 Pandas 中最常用、也最重要的函式之一。它可以讀取 CSV (Comma-Separated Values, 逗號分隔值) 檔案,並將其轉換成一個漂亮的 DataFrame。
首先,請確保 Olist CSV 檔案都存放在之前規劃的 data/olist_datasets/
資料夾中。
import pandas as pd
# 讀取訂單主表
# 檔案路徑是相對於您 Jupyter Notebook 檔案的位置
# 如果 Notebook 在 notebooks/Numpy_Basics/ 裡面,我們需要用 ../../ 回到專案根目錄
orders_df = pd.read_csv('../../data/olist_datasets/olist_orders_dataset.csv')
結果輸出:
[如果成功,它不會有任何輸出]
第一式:.head() - 窺探前五筆
.head() 可以快速查看資料的前 5 筆,對資料的欄位和內容有個大概的印象。
# 顯示前 5 筆訂單資料
print(orders_df.head())
結果輸出:
customer_id customer_unique_id
0 06b8999e2fba1a1fbc88172c00ba8bc7 861eff4711a542e4b93843c6dd7febb0
1 18955e83d337fd6b2def6b18a428ac77 290c77bc529b7ac935b93aa66c333dc3
2 4e7b3e00288586ebd08712fdd0374a03 060e732b5b29e8181a18229c7b0b2b5e
3 b2b6027bc5c5109e529d4dc6358b12c3 259dac757896d24d7702b9acbbff3f3c
4 4f2d8ab171c80ec8364f7c12e35b23ad 345ecd01c38d18a9036ed96c73b8d066
customer_zip_code_prefix customer_city customer_state
0 14409 franca SP
1 9790 sao bernardo do campo SP
2 1151 sao paulo SP
3 8775 mogi das cruzes SP
4 13056 campinas SP
第二式:.tail() - 檢查末五筆
.tail() 則是用來查看最後 5 筆,這有助於檢查資料結尾是否有異常或匯總的髒數據。
# 顯示末 5 筆訂單資料
orders_df.tail()
結果輸出:
customer_id customer_unique_id
99436 17ddf5dd5d51696bb3d7c6291687be6f 1a29b476fee25c95fbafc67c5ac95cf8
99437 e7b71a9017aa05c9a7fd292d714858e8 d52a67c98be1cf6a5c84435bd38d095d
99438 5e28dfe12db7fb50a4b2f691faecea5e e9f50caf99f032f0bf3c55141f019d99
99439 56b18e2166679b8a959d72dd06da27f9 73c2643a0a458b49f58cea58833b192e
99440 274fa6071e5e17fe303b9748641082c8 84732c5050c01db9b23e19ba39899398
customer_zip_code_prefix customer_city customer_state
99436 3937 sao paulo SP
99437 6764 taboao da serra SP
99438 60115 fortaleza CE
99439 92120 canoas RS
99440 6703 cotia SP
第三式:.info() - DataFrame 的身分證 (最重要!)
.info() 是最重要的指令。它會提供 DataFrame 的一個精簡總覽,包含:
這是我們快速**找出「缺失值」和「錯誤資料類型」**的神器!
orders_df.info()
結果輸出:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 99441 entries, 0 to 99440
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 customer_id 99441 non-null object
1 customer_unique_id 99441 non-null object
2 customer_zip_code_prefix 99441 non-null int64
3 customer_city 99441 non-null object
4 customer_state 99441 non-null object
dtypes: int64(1), object(4)
memory usage: 3.8+ MB
None
第四式:.describe() - 數值欄位的統計總覽
.describe() 會自動幫我們計算所有數值型欄位的描述性統計量,例如總數、平均值、標準差、最小值、最大值和四分位數。
orders_df.describe()
結果輸出:
customer_zip_code_prefix
count 99441.000000
mean 35137.474583
std 29797.938996
min 1003.000000
25% 11347.000000
50% 24416.000000
75% 58900.000000
max 99990.000000
結語
恭喜!今天我們成功地從外部檔案讀取了真實世界的數據,並將其載入到 Pandas DataFrame 中。我們還學會了專業的「健康檢查四部曲」,對資料的結構和品質有了初步的了解。
既然數據已經在我們手中,我們就可以開始對它進行提問和篩選了。明天,Day 18,我們將學習如何使用強大的「布林索引」,從數萬筆訂單中,過濾出我們感興趣的特定資料!