Pandas 是 Python 資料科學領域中不可或缺的工具,尤其在處理表格型資料時,其提供的 DataFrame 資料結構極為方便。本文將介紹如何運用 Pandas 操作 DataFrame,包含分割欄位、修改資料、排序、分組聚合以及統計分析等實用技巧。首先,我們會示範如何分割姓名欄位,接著說明如何修改既有資料、新增或刪除欄位,以及如何依據特定欄位排序 DataFrame。此外,我們也會深入探討如何使用 groupby 函式進行分組聚合,並計算各組的統計資料,例如平均值、總和、最大值和最小值等。最後,我們將示範如何計算 DataFrame 的基本統計資訊,例如平均值和行數,並輔以程式碼範例和流程圖,幫助讀者更清晰地理解 Pandas 的使用方法。
處理姓名欄位的技術實踐
在資料處理中,經常會遇到需要分割姓名欄位的情況。以下是如何使用Python的pandas函式庫來實作這一功能。
步驟一:匯入必要的函式庫
import pandas as pd
步驟二:建立樣本資料
# 建立樣本資料
data = {
'myname': ['Divya Sharma', 'Yathartha Chandrakar', 'Saurabh Chandrakar', 'Nilesh Bahadure', 'Priyanka Chandrakar', 'Soumya Chandrakar'],
'mysalary': [10000, 20000, 30000, 40000, 50000, 60000],
'mystaffno': [601490, 601491, 601492, 601493, 601494, 601495]
}
# 建立DataFrame
mypd_dataframe = pd.DataFrame(data)
步驟三:分割姓名欄位
# 分割姓名欄位並插入新欄位
mypd_dataframe.insert(loc=1, column='myfirstname', value=mypd_dataframe['myname'].str.strip().str.split().str[0])
mypd_dataframe.insert(loc=2, column='mysecondname', value=mypd_dataframe['myname'].str.strip().str.split().str[1])
# 刪除原始姓名欄位
del mypd_dataframe['myname']
步驟四:輸出結果
print(mypd_dataframe)
內容解密:
上述程式碼中,我們使用了str.split()
方法來分割姓名欄位。這個方法會根據空格將字串分割成列表。然後,我們使用str[0]
和str[1]
來取得列表中的第一個和第二個元素,分別對應於第一個姓名和第二個姓名。最後,我們刪除了原始的姓名欄位,以保持資料的簡潔。
圖表翻譯:
flowchart TD A[原始資料] --> B[分割姓名欄位] B --> C[插入新欄位] C --> D[刪除原始姓名欄位] D --> E[輸出結果]
此圖表展示了資料處理的流程,從原始資料開始,到分割姓名欄位、插入新欄位、刪除原始姓名欄位,最終輸出結果。
修改Pandas資料框的資料
Pandas資料框是一種強大的資料結構,允許我們輕鬆地修改其內容。以下是如何修改Pandas資料框的資料的範例。
首先,我們建立一個Pandas資料框,包含姓名、年齡和國家等欄位。
import pandas as pd
# 建立一個字典
mydict = {
'姓名': ['Divya Sharma', 'Yathartha Chandrakar', 'Saurabh Chandrakar', 'Nilesh Bahadure', 'Priyanka Chandrakar', 'Soumya Chandrakar'],
'薪水': [10000, 20000, 30000, 40000, 50000, 60000],
'員工編號': [601490, 601491, 601492, 601493, 601494, 601495]
}
# 將字典轉換為Pandas資料框
df = pd.DataFrame(mydict)
print("原始資料框:")
print(df)
接下來,我們可以修改資料框的資料。例如,我們可以修改第二行的國家欄位。
# 修改第二行的國家欄位
df.loc[1, '姓名'] = 'Yathartha Chandrakar Modified'
print("\n修改後的資料框:")
print(df)
或者,我們可以使用以下方法將姓名欄位分割為兩個欄位:第一名和姓氏。
# 分割姓名欄位
df[['第一名', '姓氏']] = df['姓名'].str.split(expand=True)
print("\n分割姓名欄位後的資料框:")
print(df)
圖表翻譯:
flowchart TD A[建立Pandas資料框] --> B[修改資料] B --> C[分割姓名欄位] C --> D[輸出修改後的資料框]
圖表翻譯:
此圖表展示了修改Pandas資料框的步驟。首先,建立一個Pandas資料框,然後修改其內容,接著分割姓名欄位,最後輸出修改後的資料框。這個過程展示了Pandas資料框的強大功能和靈活性。
內容解密:
# 修改第二行的國家欄位
df.loc[1, '姓名'] = 'Yathartha Chandrakar Modified'
內容解密:
此程式碼片段展示瞭如何修改Pandas資料框的特定欄位。使用loc
方法,可以指定要修改的行和欄位,然後賦予新的值。此方法提供了一種方便和高效的方式來修改資料框的內容。
修改及新增資料
首先,我們對資料進行修改和新增。假設我們有一個 Pandas DataFrame mypd_dataframe
,其內容如下:
myname | myage | mycountry |
---|---|---|
Alex | 35 | UK |
John | 45 | USA |
Michael | 55 | Australia |
Tom | 65 | Finland |
修改特定欄位資料
# 修改第二列(索引為1)的'mycountry'欄位為'Russia'
mypd_dataframe.loc[1, 'mycountry'] = 'Russia'
印出修改後的 DataFrame
print(mypd_dataframe)
print('-'*50)
新增欄位
# 新增一個名為'Hobby'的欄位,並分別給予每列不同的愛好
mypd_dataframe['Hobby'] = ['Playing Cricket', 'Listening Music', 'Reading Books', 'Cooking']
印出新增欄位後的 DataFrame
print(mypd_dataframe)
print('-'*50)
刪除欄位
# 刪除'Hobby'欄位,並將結果存入my_df_drop
my_df_drop = mypd_dataframe.drop(columns=['Hobby'])
印出刪除欄位後的 DataFrame
print(my_df_drop)
print('-'*50)
排序 DataFrame
# 將 DataFrame 按照'myname'欄位進行排序,且為降序(ascending=False)
my_df_sort = mypd_dataframe.sort_values(by='myname', ascending=False)
印出排序後的 DataFrame
print(my_df_sort)
完整程式碼
import pandas as pd
# 建立 DataFrame
data = {
'myname': ['Alex', 'John', 'Michael', 'Tom'],
'myage': [35, 45, 55, 65],
'mycountry': ['UK', 'USA', 'Australia', 'Finland']
}
mypd_dataframe = pd.DataFrame(data)
# 修改第二列的'mycountry'欄位為'Russia'
mypd_dataframe.loc[1, 'mycountry'] = 'Russia'
print(mypd_dataframe)
print('-'*50)
# 新增'Hobby'欄位
mypd_dataframe['Hobby'] = ['Playing Cricket', 'Listening Music', 'Reading Books', 'Cooking']
print(mypd_dataframe)
print('-'*50)
# 刪除'Hobby'欄位
my_df_drop = mypd_dataframe.drop(columns=['Hobby'])
print(my_df_drop)
print('-'*50)
# 對 DataFrame 進行排序
my_df_sort = mypd_dataframe.sort_values(by='myname', ascending=False)
print(my_df_sort)
結果分析
- 修改特定欄位資料:成功將第二列的
mycountry
欄位修改為Russia
。 - 新增欄位:成功新增了一個名為
Hobby
的欄位,並給予每列不同的愛好。 - 刪除欄位:成功刪除了
Hobby
欄位。 - 排序 DataFrame:成功按照
myname
欄位進行降序排序。
資料整合與分組分析
在資料分析中,能夠有效地整合和分組資料是一項非常重要的技能。Python 的 Pandas 函式庫提供了強大的工具來實作這一功能。以下將介紹如何使用 Pandas 進行資料分組和聚合運算。
資料準備
首先,我們需要準備一份示例資料。假設我們有一份包含姓名、年齡和國家的資料表,如下所示:
姓名 | 年齡 | 國家 |
---|---|---|
Alex | 35 | 英國 |
John | 45 | 俄羅斯 |
Michael | 55 | 澳洲 |
Tom | 65 | 芬蘭 |
資料分組和聚合
Pandas 的 groupby
函式允許我們根據一個或多個欄位對資料進行分組,並對每個分組進行聚合運算。例如,我們可以根據國家對資料進行分組,並計算每個國家的平均年齡。
import pandas as pd
# 建立示例資料
data = {
'姓名': ['Alex', 'John', 'Michael', 'Tom'],
'年齡': [35, 45, 55, 65],
'國家': ['英國', '俄羅斯', '澳洲', '芬蘭']
}
df = pd.DataFrame(data)
# 對資料進行分組和聚合
grouped_df = df.groupby('國家')['年齡'].mean()
print(grouped_df)
結果解釋
執行上述程式碼後,我們將得到每個國家的平均年齡。這個結果可以幫助我們瞭解不同國家的人口年齡結構。
進一步分析
除了計算平均年齡外,我們還可以對資料進行其他聚合運算,例如計算總數、最大值、最小值等。Pandas 的 agg
函式提供了這些功能。
# 對資料進行多種聚合運算
agg_df = df.groupby('國家')['年齡'].agg(['mean', 'sum', 'max', 'min'])
print(agg_df)
圖表視覺化
為了更好地理解資料,我們可以使用圖表來視覺化結果。以下是使用 Mermaid 圖表語言建立的一個簡單圖表:
flowchart TD A[資料分組] --> B[聚合運算] B --> C[結果視覺化] C --> D[圖表呈現]
圖表翻譯:
此圖表展示了資料分析的流程,從資料分組到聚合運算,最後到結果視覺化和圖表呈現。
資料分析與處理
在進行資料分析時,瞭解資料的基本統計特性是非常重要的。以下是如何使用Python的pandas函式庫來計算和展示資料框架(DataFrame)的基本統計資訊。
載入必要的函式庫
首先,需要載入pandas函式庫,以便能夠操作DataFrame。
import pandas as pd
建立DataFrame
建立一個簡單的DataFrame,包含姓名、年齡和國家等欄位。
data = {
'myname': ['Alex', 'John', 'Michael', 'Tom'],
'myage': [35, 45, 55, 65],
'mycountry': ['UK', 'USA', 'Australia', 'Finland']
}
mypd_dataframe = pd.DataFrame(data)
顯示DataFrame
顯示建立的DataFrame。
print(mypd_dataframe)
print('-' * 50)
計算平均年齡
計算DataFrame中年齡欄位的平均值。
my_mean_age = mypd_dataframe['myage'].mean()
print(my_mean_age)
print('-' * 50)
取得DataFrame行數
計算DataFrame中的總行數。
my_num_row_count = len(mypd_dataframe.index)
print(my_num_row_count)
print('-' * 50)
分組計算平均年齡
根據國家分組,計算每個國家的人員平均年齡。
mygroup = mypd_dataframe.groupby('mycountry')['myage'].mean()
print(mygroup)
內容解密:
mypd_dataframe
是一個包含姓名、年齡和國家資訊的DataFrame。my_mean_age
計算了年齡欄位的平均值,使用了mean()
方法。my_num_row_count
取得了DataFrame的總行數,使用了len()
函式結合index
屬性。mygroup
進行了分組計算,根據國家分組並計算每組的平均年齡,使用了groupby()
方法和mean()
方法。
圖表翻譯:
flowchart TD A[載入資料] --> B[建立DataFrame] B --> C[計算平均年齡] C --> D[計算行數] D --> E[分組計算] E --> F[顯示結果]
此圖表展示了資料分析的流程,從載入資料開始,到建立DataFrame,然後進行各種計算和最後顯示結果。
資料操作與探索
在本章中,我們將探討 Pandas 中的資料操作與探索技術,包括資料索引、選擇、刪除、篩選等。
資料索引與選擇
Pandas 中的資料索引可以使用 set_index()
方法設定,或者在讀取資料時使用 index_col
引數設定。選擇資料可以使用 loc[]
方法,根據索引標籤選擇資料。
import pandas as pd
# 建立一個範例資料表
data = {'Name': ['John', 'Mary', 'David'],
'Age': [25, 31, 42]}
df = pd.DataFrame(data)
# 設定 'Name' 欄位為索引
df.set_index('Name', inplace=True)
# 選擇 'John' 的資料
print(df.loc['John'])
資料刪除
Pandas 中的資料刪除可以使用 drop()
方法,根據索引標籤或欄位名稱刪除資料。
# 刪除 'Mary' 的資料
df.drop('Mary', inplace=True)
資料篩選
Pandas 中的資料篩選可以使用 query()
方法,根據條件表示式篩選資料。
# 篩選 Age 大於 30 的資料
print(df.query('Age > 30'))
資料操作
Pandas 中的資料操作可以使用 apply()
方法,根據函式對資料進行操作。
# 對 Age 欄位加 10
df['Age'] = df['Age'].apply(lambda x: x + 10)
資料統計
Pandas 中的資料統計可以使用 nlargest()
和 nsmallest()
方法,根據欄位名稱取得最大和最小的資料。
# 取得 Age 最大的 2 筆資料
print(df.nlargest(2, 'Age'))
文字資料處理
Pandas 中的文字資料處理可以使用字串方法,根據條件表示式篩選文字資料。
# 篩選 Name 中含有 'o' 的資料
print(df[df['Name'].str.contains('o')])
重點回顧
- 使用
set_index()
方法設定資料索引。 - 使用
loc[]
方法根據索引標籤選擇資料。 - 使用
drop()
方法刪除資料。 - 使用
query()
方法根據條件表示式篩選資料。 - 使用
apply()
方法對資料進行操作。 - 使用
nlargest()
和nsmallest()
方法取得最大和最小的資料。 - 使用字串方法篩選文字資料。
從使用者經驗的最佳化角度,本文深入探討了Python Pandas 函式庫在資料處理和分析方面的實務應用,涵蓋了姓名欄位分割、資料修改、新增、刪除、排序、分組、聚合以及統計分析等關鍵技術。透過詳細的程式碼範例和步驟說明,讀者可以快速掌握Pandas 的核心操作技巧,並應用於實際的資料處理場景。然而,Pandas 在處理極大規模資料集時,效能瓶頸仍是一項挑戰,需要進一步探索更最佳化的解決方案,例如使用 Dask 或 Spark 等分散式運算框架。對於追求高效能的資料科學家而言,深入理解Pandas 的底層機制以及與其他高效能工具的整合至關重要。玄貓認為,Pandas 作為資料科學領域的基本工具,仍將持續演進,並在與其他技術的融合中,不斷拓展其應用邊界,在資料處理領域扮演更加重要的角色。