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,其內容如下:

mynamemyagemycountry
Alex35UK
John45USA
Michael55Australia
Tom65Finland

修改特定欄位資料

# 修改第二列(索引為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 進行資料分組和聚合運算。

資料準備

首先,我們需要準備一份示例資料。假設我們有一份包含姓名、年齡和國家的資料表,如下所示:

姓名年齡國家
Alex35英國
John45俄羅斯
Michael55澳洲
Tom65芬蘭

資料分組和聚合

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 作為資料科學領域的基本工具,仍將持續演進,並在與其他技術的融合中,不斷拓展其應用邊界,在資料處理領域扮演更加重要的角色。