Pandas 是 Python 中常用的資料分析函式庫,提供高效的 DataFrame 物件,方便進行資料操作和分析。本文將介紹如何使用 Pandas 讀取 CSV 檔案、建立 DataFrame、指定欄位名稱、探索 axes 屬性、選擇欄位、檢視 DataFrame 資訊,包含資料型別、記憶體使用量等,並示範如何自定義 info() 方法輸出。此外,文章也涵蓋了資料結構分析,例如欄位型別、資料內容、大小、索引等,以及如何進行隨機抽樣,包含指定抽樣數量和比例。這些技巧可以幫助開發者更有效率地探索和分析資料,並從中獲得有價值的洞察。
讀取 CSV 檔案並探索 DataFrame
首先,我們需要讀取一個名為 student.csv
的檔案,然後探索其資料結構。以下是相關程式碼:
import pandas as pd
import numpy as np
# 讀取 CSV 檔案
mydf = pd.read_csv('student.csv')
# 顯示資料型態
print(mydf.dtypes)
# 顯示資料型態分佈
print(mydf.dtypes.value_counts())
輸出結果顯示資料型態分佈,其中 id
和 mark
欄位為整數 (int64
),而 name
和 class
欄位為物件 (object
)。
建立 DataFrame
接下來,我們建立一個使用 NumPy 陣列的 DataFrame:
# 建立 NumPy 陣列
myndarray = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 建立 DataFrame (預設欄位名稱)
mydf2 = pd.DataFrame(myndarray)
print(mydf2)
這會建立一個具有預設欄位名稱 (0, 1, 2) 的 DataFrame。
指定欄位名稱
現在,我們指定欄位名稱建立另一個 DataFrame:
# 建立 DataFrame (指定欄位名稱)
mydf3 = pd.DataFrame(myndarray, columns=["a", "b", "c"])
print(mydf3)
這會建立一個具有指定欄位名稱 (a
, b
, c
) 的 DataFrame。
##Axes 屬性
最後,我們探索 DataFrame 的 axes
屬性:
# 顯示 axes 屬性
print(mydf3.axes)
這會傳回一個包含軸物件的列表,其中每個軸代表一個維度 (行索引和欄位名稱)。輸出結果顯示軸物件的列表,其中包含行索引和欄位名稱。
內容解密:
在這個範例中,我們使用 pd.read_csv
函式讀取 CSV 檔案,並探索其資料結構。然後,我們建立兩個 DataFrame:一個使用預設欄位名稱,另一個使用指定欄位名稱。最後,我們探索 axes
屬性,以瞭解 DataFrame 的維度結構。
圖表翻譯:
以下是使用 Mermaid 圖表語言描述 DataFrame 建立過程:
flowchart TD A[讀取 CSV 檔案] --> B[建立 NumPy 陣列] B --> C[建立 DataFrame (預設欄位名稱)] C --> D[建立 DataFrame (指定欄位名稱)] D --> E[探索 axes 屬性]
這個圖表描述了從讀取 CSV 檔案到建立 DataFrame,並探索其 axes
屬性的過程。
使用 Pandas 選擇 DataFrame 中的欄位
當您需要從 DataFrame 中選擇特定的欄位時,可以使用以下方法。假設您有一個名為 mydf
的 DataFrame,包含多個欄位,您可以使用以下語法選擇一個或多個欄位。
選擇單一欄位
如果您只需要選擇一個欄位,可以使用以下語法:
mydf['欄位名稱']
這將傳回指定欄位的 Series 物件。
選擇多個欄位
如果您需要選擇多個欄位,可以使用以下語法:
mydf[['欄位名稱1', '欄位名稱2']]
這將傳回一個包含指定欄位的 DataFrame。
使用 info()
方法檢視 DataFrame 資訊
在開始使用 DataFrame 之前,瞭解其結構和內容是非常重要的。info()
方法可以提供 DataFrame 的摘要資訊,包括每個欄位的資料型別、記憶體使用量等。
mydf.info()
這將顯示 DataFrame 的詳細資訊,包括每個欄位的名稱、資料型別、記憶體使用量等。
自定義 info()
方法輸出
如果您需要自定義 info()
方法的輸出,可以使用以下引數:
mydf.info(verbose=True, max_cols=10)
這將顯示 DataFrame 的詳細資訊,並且只顯示前 10 個欄位。
範例程式碼
以下是完整的範例程式碼:
import pandas as pd
# 讀取 CSV 檔案
mydf = pd.read_csv('student.csv', index_col='id')
# 選擇單一欄位
print(mydf['name'])
# 選擇多個欄位
print(mydf[['name', 'age']])
# 檢視 DataFrame 資訊
mydf.info()
# 自定義 info() 方法輸出
mydf.info(verbose=True, max_cols=10)
這些方法可以幫助您更有效地使用 Pandas 選擇和檢視 DataFrame 中的欄位。
資料框架資訊顯示
當我們處理資料時,瞭解資料框架(DataFrame)的結構和內容是非常重要的。Python 的 Pandas函式庫提供了 info()
方法來顯示資料框架的相關資訊。
基本資訊顯示
print(mydf.info())
這會顯示資料框架的索引、資料欄位、非空值數量、資料型別等資訊。
自訂資訊顯示
info()
方法可以接受一些引數來自訂顯示的內容。例如:
print(mydf.info(verbose=False))
這會簡化顯示的內容,減少一些詳細資訊。
記憶體使用資訊
如果你想知道資料框架佔用的記憶體空間,可以使用 memory_usage
引數:
print(mydf.info(memory_usage=False))
這會隱藏記憶體使用資訊。
組合引數
你也可以組合不同的引數來自訂顯示的內容。例如:
print(mydf.info(verbose=False, memory_usage=False))
這會簡化顯示的內容,並隱藏記憶體使用資訊。
隱藏計數資訊
如果你不想顯示每個欄位的計數資訊,可以使用 show_counts
引數:
print(mydf.info(show_counts=False))
這會隱藏每個欄位的非空值數量。
範例輸出
根據你的輸出,資料框架 mydf
有 35 個索引,4 個欄位,分別是 name
、class
、mark
和 gender
。其中,mark
欄位是整數型別,其他欄位是物件型別。
內容解密:
info()
方法是用來顯示資料框架的相關資訊。verbose
引數可以用來簡化顯示的內容。memory_usage
引數可以用來隱藏記憶體使用資訊。show_counts
引數可以用來隱藏每個欄位的計數資訊。
圖表翻譯:
flowchart TD A[資料框架] --> B[info() 方法] B --> C[顯示索引] B --> D[顯示資料欄位] B --> E[顯示非空值數量] B --> F[顯示資料型別] C --> G[索引資訊] D --> H[欄位資訊] E --> I[非空值數量] F --> J[資料型別]
這個圖表顯示了 info()
方法如何顯示資料框架的相關資訊。
資料結構分析
在進行資料分析之前,瞭解資料的結構和內容是非常重要的。根據提供的資訊,資料包含35條記錄,每條記錄都有四個欄位:name
、class
、mark
和gender
。
欄位型別
name
:物件(object)型別,表示學生的姓名。class
:物件(object)型別,表示學生的班級。mark
:整數(int64)型別,表示學生的成績。gender
:物件(object)型別,表示學生的性別。
資料內容
資料中包含了35名學生的資訊,每個學生都有一個唯一的姓名、所屬班級、成績和性別。這些資訊可以用來進行各種分析,例如計算不同班級的平均成績、統計不同性別的學生人數等。
資料大小
資料的大小約為1.4+ KB,這是一個相對較小的資料集,可以輕易地進行分析和處理。
資料索引
資料的索引範圍從1到35,表示每條記錄都有一個唯一的索引值,可以用來快速查詢和存取特定的記錄。
資料分析
根據提供的資訊,以下是一些可能的資料分析方向:
- 成績統計:計算所有學生的平均成績、最高成績和最低成績。
- 班級比較:比較不同班級的平均成績和成績分佈。
- 性別統計:統計不同性別的學生人數和平均成績。
- 相關性分析:分析不同欄位之間的相關性,例如成績和班級之間的相關性。
這些分析可以幫助我們更好地瞭解資料的內容和結構,並得出有趣的結論和洞察。
內容解密:
以上所述的資料結構和內容分析,是根據提供的資訊進行的。實際上,資料可能包含更多的欄位和記錄,需要進一步的分析和處理。
圖表翻譯:
graph LR A[資料結構] --> B[欄位型別] B --> C[資料內容] C --> D[資料大小] D --> E[資料索引] E --> F[資料分析]
此圖表展示了資料結構和內容之間的關係,以及如何進行資料分析。
圖表解說:
圖表中,每個節點代表了一個不同的概念,例如資料結構、欄位型別、資料內容等。箭頭則代表了這些概念之間的關係。例如,資料結構決定了欄位型別,欄位型別則決定了資料內容等。這個圖表可以幫助我們更好地瞭解資料的內容和結構,並得出有趣的結論和洞察。
資料結構與型別
在資料科學中,瞭解資料的結構和型別是非常重要的。以下是一個示例,展示瞭如何使用 Pandas 函式庫來檢視資料的結構和型別。
資料結構
首先,我們可以使用 dtypes
屬性來檢視資料的型別。如下所示:
# Column Dtype
--- ------ -----
0 name object
1 class object
2 mark int64
3 gender object
dtypes: int64(1), object(3)
memory usage: 1.4+ KB
從上面的輸出中,我們可以看到資料中有四個欄位:name
、class
、mark
和 gender
。其中,mark
欄位的型別是 int64
,而其他三個欄位的型別都是 object
。
使用 info()
方法
我們也可以使用 info()
方法來檢視資料的結構和型別。如下所示:
import pandas as pd
mydf = pd.read_csv('student.csv', index_col=['id'])
mydf.info()
這將會顯示資料的結構和型別,包括每個欄位的型別和記憶體使用情況。
使用 buf
引數
如果我們想要將 info()
方法的輸出儲存到一個緩衝區中,而不是直接顯示在主控臺上,可以使用 buf
引數。如下所示:
mybuffer = io.StringIO()
mydf.info(buf=mybuffer)
這將會將 info()
方法的輸出儲存到 mybuffer
中,而不是直接顯示在主控臺上。
內容解密:
在上面的程式碼中,我們使用了 io.StringIO()
來建立一個緩衝區。然後,我們使用 info()
方法的 buf
引數來指定輸出的目的地。這樣,我們就可以將輸出儲存到一個緩衝區中,而不是直接顯示在主控臺上。
圖表翻譯:
flowchart TD A[讀取資料] --> B[檢視資料結構] B --> C[使用 info() 方法] C --> D[指定輸出目的地] D --> E[儲存到緩衝區]
在上面的圖表中,我們展示瞭如何使用 info()
方法來檢視資料的結構和型別,並將輸出儲存到一個緩衝區中。
資料框架資訊儲存與隨機抽樣
在資料分析過程中,瞭解資料框架(DataFrame)的結構和內容至關重要。以下將介紹如何儲存資料框架的資訊以及如何進行隨機抽樣。
資料框架資訊儲存
為了儲存資料框架的資訊,例如索引、資料欄位、非空值計數、資料型別等,我們可以使用 info()
方法。然而,為了將這些資訊儲存到檔案中,我們需要使用緩衝區(buffer)來暫存這些資訊。
import pandas as pd
# 載入student.csv檔案到mydf資料框架
mydf = pd.read_csv('student.csv')
# 使用info()方法取得資料框架的資訊,並儲存到緩衝區mybuffer
mybuffer = io.StringIO()
mydf.info(buf=mybuffer)
# 讀取緩衝區的內容
myvar = mybuffer.getvalue()
# 將緩衝區的內容寫入df_information.txt檔案
with open("df_information.txt", 'w', encoding='utf-8') as myfile:
myfile.write(myvar)
print("檢視df_information.txt檔案以瀏覽詳細資訊")
執行上述程式碼後,df_information.txt
檔案將包含如下內容:
索引:35個條目,1到35
資料欄位(總共4個欄位):
# 欄位名稱 非空值計數 資料型別
--- ------ -------------- -----
0 名稱 35個非空值 object
1 班級 35個非空值 object
2 成績 35個非空值 int64
3 性別 35個非空值 object
dtypes: int64(1), object(3)
記憶體使用量:1.4+ KB
隨機抽樣
當需要從資料框架中隨機抽取記錄時,可以使用 sample()
方法。這個方法允許您從軸(axis)上傳回隨機樣本專案。
# 進行隨機抽樣,傳回5條記錄
random_sample = mydf.sample(n=5)
print(random_sample)
這將從 mydf
資料框架中隨機傳回 5 條記錄。注意,實際傳回的記錄將因為隨機性而有所不同。
圖表翻譯:
graph LR A[載入資料] --> B[取得資料框架資訊] B --> C[儲存資訊到檔案] C --> D[進行隨機抽樣] D --> E[傳回隨機樣本]
內容解密:
在上述程式碼中,我們首先載入 student.csv
檔案到 mydf
資料框架。然後,我們使用 info()
方法取得資料框架的資訊,並儲存到 mybuffer
緩衝區。接著,我們將緩衝區的內容寫入 df_information.txt
檔案。最後,我們使用 sample()
方法進行隨機抽樣,傳回 5 條記錄。
這些步驟展示瞭如何儲存資料框架的資訊以及如何進行隨機抽樣,為資料分析提供了有用的工具。
隨機抽樣資料
在資料分析中,隨機抽樣是一種常見的技術,用於從原始資料集中選取一部分資料以進行分析或展示。Python 的 pandas 函式庫提供了 sample
方法來實作這一功能。
基本使用
首先,我們需要匯入 pandas 函式庫並載入一個示例資料集。假設我們有一個名為 student.csv
的檔案,包含學生的基本資訊,如 ID、姓名、班級、成績和性別。
import pandas as pd
# 載入資料集
df = pd.read_csv('student.csv')
隨機抽樣
現在,我們可以使用 sample
方法對資料集進行隨機抽樣。預設情況下,sample
方法會傳回一個包含單一隨機記錄的資料框。
print(df.sample())
每次執行這行程式碼,都會顯示一個不同的隨機記錄。
指定抽樣數量
如果我們想要抽取多個記錄,可以使用 n
引數指定抽樣的記錄數。
print(df.sample(n=2))
這會傳回一個包含兩個隨機記錄的資料框。
指定抽樣比例
或者,我們可以使用 frac
引數指定抽取的記錄比例。
print(df.sample(frac=0.2))
這會傳回一個包含原始資料集 20% 記錄的資料框。
完整示例
以下是完整的示例程式碼:
import pandas as pd
# 載入資料集
df = pd.read_csv('student.csv')
# 顯示原始資料集
print("原始資料集:")
print(df)
# 隨機抽樣一個記錄
print("\n隨機抽樣一個記錄:")
print(df.sample())
# 隨機抽樣兩個記錄
print("\n隨機抽樣兩個記錄:")
print(df.sample(n=2))
# 隨機抽樣 20% 的記錄
print("\n隨機抽樣 20% 的記錄:")
print(df.sample(frac=0.2))
這個示例展示瞭如何使用 sample
方法對資料集進行隨機抽樣,並指定抽樣的記錄數或比例。
隨機抽取資料欄位
在資料分析中,經常需要隨機抽取部分資料欄位以進行特定分析或展示。以下將介紹如何使用 Python 的 pandas 函式庫來實作這一功能。
資料準備
首先,我們需要有一個 DataFrame 物件,其中包含了我們想要分析的資料。假設我們有一個如下所示的 DataFrame:
import pandas as pd
# 建立一個簡單的DataFrame
data = {
'id': [28, 31, 5, 10, 11, 19, 33, 29, 22, 2],
'name': ['Tess', 'Binn', 'Alex', 'Ronald', 'Recky', 'Jackly', 'Gain', 'Reppy', 'Herod', 'Arnold'],
'class': ['Seven', 'Seven', 'Four', 'Six', 'Six', 'Nine', 'Seven', 'Six', 'Eight', 'Three'],
'mark': [55, 90, 55, 89, 94, 65, 69, 79, 79, 55],
'gender': ['male', 'female', 'male', 'female', 'female', 'female', 'male', 'female', 'male', 'male']
}
mydf = pd.DataFrame(data)
隨機抽取欄位
如果需要隨機抽取兩個欄位,可以使用 sample
方法,並指定 axis=1
以表示抽取欄位,而不是列。以下是如何做到的:
# 隨機抽取兩個欄位
random_columns = mydf.sample(n=2, axis=1)
print(random_columns)
這段程式碼會從 mydf
中隨機選擇兩個欄位,並將它們列印預出來。由於是隨機選擇,每次執行程式碼可能會得到不同的結果。
圖表視覺化
為了更好地理解資料結構和隨機抽取的結果,可以使用 Mermaid 圖表來視覺化資料關係和抽取過程。
flowchart TD A[資料準備] --> B[隨機抽取欄位] B --> C[視覺化結果] C --> D[分析和展示]
圖表翻譯:
上述 Mermaid 圖表描述了從資料準備到隨機抽取欄位,然後到視覺化結果,最後到分析和展示的整個流程。這個圖表幫助我們理解了如何一步一步地處理和分析資料。
從使用者經驗視角,分析技術對使用者經驗的實質影響,觀察開發者社群對此技術的實際反饋,評估技術轉換成使用者價值的效率。Pandas 的 sample()
方法提供便捷的隨機抽樣功能,能有效協助資料分析師快速取得資料子集進行探索性分析,提升資料處理效率。然而,缺乏更精細的控制引數,例如分層抽樣或依據特定條件抽樣,限制了其在複雜分析場景下的應用。開發者社群普遍認為 sample()
方法易於使用,但期盼官方能提供更進階的抽樣功能。從技術演進角度,這項技術代表了資料處理便捷化的方向,值得關注。對於追求快速資料探索的使用者,sample()
方法能有效提升效率;但對於需要更精細控制的場景,則需搭配其他技術或自行開發相關功能。接下來的 2-3 年,將是此類別資料處理技術持續最佳化,並融入更多進階功能的關鍵視窗期。