Pandas 是 Python 資料科學領域的核心工具,熟練掌握其資料處理技巧對於提升分析效率至關重要。本文將介紹一些常見的 Pandas 資料處理方法,包括處理欄位名稱中的空格、資料排序、篩選、查詢以及 apply()、nlargest()、nsmallest() 和 where() 等方法的應用。這些方法可以幫助我們更有效地操作和分析資料,從而提取有價值的資訊。理解這些方法的原理和應用場景,可以讓我們更好地應對各種資料處理挑戰。

處理欄位名稱中的空格

在資料分析中,經常會遇到欄位名稱中包含空格的情況。這種情況可能會導致查詢和操作資料時出現問題。為瞭解決這個問題,我們可以使用反引號(``)來包圍欄位名稱。

範例程式碼

import pandas as pd

# 讀取 CSV 檔案
df = pd.read_csv('query_eg.csv', index_col='myname')

# 使用反引號來處理欄位名稱中的空格
print(df[['myage', 'mycountry', 'mysalary']])

內容解密:

在上述程式碼中,我們使用 pd.read_csv 函式來讀取 CSV 檔案,並將 myname 欄位設為索引欄位。接著,我們使用反引號(``)來包圍欄位名稱,以便正確地存取欄位資料。

Mermaid 圖表

  flowchart TD
    A[讀取 CSV 檔案] --> B[設定索引欄位]
    B --> C[使用反引號處理欄位名稱]
    C --> D[存取欄位資料]

圖表翻譯:

此圖表展示了處理欄位名稱中的空格的步驟。首先,讀取 CSV 檔案,然後設定索引欄位。接著,使用反引號來包圍欄位名稱,以便正確地存取欄位資料。最後,存取欄位資料並進行後續操作。

資料整理與篩選

在資料分析中,能夠有效地整理和篩選資料是非常重要的。以下範例展示瞭如何使用 Pandas 進行資料排序、重新命名欄位以及根據條件篩選資料。

篩選前資料

import pandas as pd

# 建立資料框
data = {
    'myname': ['Divya', 'Mintoo', 'Nilesh', 'Priyanka', 'Saurabh'],
    'myage': [34, 37, 43, 30, 40],
    'mycountry': ['India', 'Australia', 'UK', 'USA', 'Italy'],
    'mysalary': [10000, 20000, 40000, 50000, 60000]
}
mypd_dataframe = pd.DataFrame(data)

# 對索引進行排序
mypd_dataframe.sort_index(inplace=True)

# 重新命名欄位
mypd_dataframe.rename(columns={'mysalary': 'My Salary'}, inplace=True)

print(mypd_dataframe)
print('-'*50)

篩選資料

接下來,我們將根據「My Salary」欄位的值進行篩選,僅保留薪水低於 45000 的資料。注意,由於「My Salary」欄位名稱包含空格,因此需要使用反引號 (`) 將欄位名稱括起來,以避免語法錯誤。

# 篩選薪水低於 45000 的資料
mypd_dataframe.query("`My Salary` < 45000", inplace=True)

print(mypd_dataframe)

輸出結果

執行上述程式碼後,輸出的結果如下:

    myname  myage mycountry  My Salary
0    Divya     34      India      10000
1   Mintoo     37  Australia      20000
2   Nilesh     43        UK      40000

如預期,僅保留了薪水低於 45000 的三筆資料。這個範例展示瞭如何使用 Pandas 進行資料整理和篩選,對於資料分析和處理非常有用。

資料處理與查詢

在資料科學中,能夠有效地處理和查詢資料是一項基本且重要的技能。以下範例將展示如何使用Python的pandas函式庫來讀取CSV檔、排序索引、重新命名欄位以及進行查詢。

步驟1:讀取CSV檔

首先,我們需要讀取一個名為query_eg.csv的CSV檔。這個檔案包含了個人資料,包括姓名、年齡、國家和薪水。使用pandas函式庫的read_csv方法可以輕鬆地完成這個任務。

import pandas as pd

# 讀取CSV檔
df = pd.read_csv('query_eg.csv', index_col='myname')

步驟2:排序索引

接下來,我們需要對資料框架的索引進行排序。這可以使用sort_index方法來完成。

# 對索引進行排序
df.sort_index(inplace=True)

步驟3:重新命名欄位

有時候,欄位的名稱可能不是我們想要的。例如,原本的欄位名稱是mysalary,但是我們希望它變成My_Salary。這可以使用rename方法來完成。

# 重新命名欄位
df.rename(columns={'mysalary':'My_Salary'}, inplace=True)

步驟4:查詢資料

最後,我們可以使用query方法來查詢資料框架中的特定資料。例如,我們想要查詢所有年齡大於35歲的人。

# 查詢年齡大於35歲的人
result = df.query('myage > 35')
print(result)

完整程式碼

以下是完整的程式碼:

import pandas as pd

# 讀取CSV檔
df = pd.read_csv('query_eg.csv', index_col='myname')

# 對索引進行排序
df.sort_index(inplace=True)

# 重新命名欄位
df.rename(columns={'mysalary':'My_Salary'}, inplace=True)

# 查詢年齡大於35歲的人
result = df.query('myage > 35')
print(result)

內容解密:

在上述程式碼中,我們首先讀取了CSV檔,並將myname欄位設定為索引。然後,我們對索引進行了排序,以確保資料按照姓名的字母順序排列。接下來,我們重新命名了mysalary欄位為My_Salary,以使欄位名稱更加清晰。最後,我們使用query方法查詢了年齡大於35歲的人,並列印預出了結果。

圖表翻譯:

以下是使用Mermaid語法繪製的流程圖,展示了上述程式碼的執行流程:

  flowchart TD
    A[讀取CSV檔] --> B[排序索引]
    B --> C[重新命名欄位]
    C --> D[查詢資料]
    D --> E[列印結果]

這個流程圖顯示了程式碼的執行順序,從讀取CSV檔開始,到查詢資料和列印結果為止。

資料過濾與查詢

在資料分析中,能夠有效地過濾和查詢資料是非常重要的。Pandas函式庫提供了強大的資料操作功能,包括資料過濾和查詢。

使用query()方法進行資料過濾

Pandas的query()方法允許你使用字串表示式來過濾資料。以下是如何使用query()方法來過濾薪水低於45000的資料:

import pandas as pd

# 建立一個樣本資料框
data = {
    'myname': ['Divya', 'Mintoo', 'Nilesh', 'Priyanka', 'Saurabh', 'Yathartha'],
    'myage': [34, 37, 43, 30, 40, 35],
    'mycountry': ['India', 'Australia', 'UK', 'USA', 'Italy', 'India'],
    'My_Salary': [10000, 20000, 40000, 50000, 60000, 30000]
}
mypd_dataframe = pd.DataFrame(data)

# 使用query()方法過濾薪水低於45000的資料
mypd_dataframe.query("`My_Salary` < 45000", inplace=True)

# 列印過濾後的資料
print(mypd_dataframe)

Output:

   myname  myage mycountry  My_Salary
0   Divya     34      India      10000
1  Mintoo     37  Australia      20000
2  Nilesh     43         UK      40000
5  Yathartha     35      India      30000

如你所見,query()方法成功地過濾出了薪水低於45000的資料。

使用loc[]方法進行資料過濾

除了使用query()方法外,你也可以使用loc[]方法來過濾資料。以下是如何使用loc[]方法來過濾薪水低於45000的資料:

# 使用loc[]方法過濾薪水低於45000的資料
mypd_dataframe = mypd_dataframe.loc[mypd_dataframe['My_Salary'] < 45000]

# 列印過濾後的資料
print(mypd_dataframe)

Output:

   myname  myage mycountry  My_Salary
0   Divya     34      India      10000
1  Mintoo     37  Australia      20000
2  Nilesh     43         UK      40000
5  Yathartha     35      India      30000

兩種方法都可以達到相同的結果,但是query()方法提供了更為彈性的表示式語法,而loc[]方法則提供了更為直接的索引方式。

圖表翻譯:

  flowchart TD
    A[資料框] --> B[過濾條件]
    B --> C[query()方法]
    C --> D[過濾結果]
    D --> E[列印結果]

這個流程圖描述瞭如何使用query()方法來過濾資料,並將結果列印出來。

使用 Pandas 的 apply() 方法進行資料轉換

Pandas 的 apply() 方法是一種強大的工具,能夠對 DataFrame 或 Series 進行元素級別的操作。以下將介紹如何使用 apply() 方法對 DataFrame 進行轉換。

基本語法

apply() 方法的基本語法如下:

df.apply(func, axis=0, raw=False, result_type=None, args=(), **kwargs)

其中,func 是要應用的函式,axis 是應用方向(0 表示列,1 表示行),raw 是是否傳回原始資料,result_type 是傳回結果的型別,args 是函式的引數,**kwargs 是其他引數。

範例:對 DataFrame 進行轉換

假設我們有一個 DataFrame df,包含以下資料:

Priyanka 30 USA 50000
Saurabh 40 Italy 60000
Yathartha 35 India 30000
Divya 34 India 10000
Mintoo 37 Australia 20000
Nilesh 43 UK 40000
Yathartha 35 India 30000

我們可以使用 apply() 方法對這個 DataFrame 進行轉換。例如,我們可以使用以下程式碼對每一行進行轉換:

import pandas as pd

# 載入資料
df = pd.read_csv('query_eg.csv', index_col='myname')
df.sort_index(inplace=True)

# 定義轉換函式
def convert_row(row):
    # 對每一行進行轉換
    row['myage'] = row['myage'] + 1
    return row

# 對 DataFrame 進行轉換
df = df.apply(convert_row, axis=1)

print(df)

這個程式碼會對每一行的 myage 欄位加 1。

使用 apply() 方法進行資料分析

apply() 方法也可以用於進行資料分析。例如,我們可以使用以下程式碼計算每一行的平均值:

import pandas as pd

# 載入資料
df = pd.read_csv('query_eg.csv', index_col='myname')
df.sort_index(inplace=True)

# 定義分析函式
def analyze_row(row):
    # 計算每一行的平均值
    avg = (row['myage'] + row['My_Salary']) / 2
    return avg

# 對 DataFrame 進行分析
avg_values = df.apply(analyze_row, axis=1)

print(avg_values)

這個程式碼會計算每一行的平均值,並傳回一個 Series。

圖表翻譯:

  graph LR
    A[載入資料] --> B[定義轉換函式]
    B --> C[對 DataFrame 進行轉換]
    C --> D[傳回結果]
    D --> E[進行資料分析]
    E --> F[傳回分析結果]

內容解密:

以上程式碼示範瞭如何使用 apply() 方法對 DataFrame 進行轉換和分析。apply() 方法是一種強大的工具,能夠對 DataFrame 或 Series 進行元素級別的操作。透過使用 apply() 方法,我們可以簡單地對資料進行轉換和分析。

使用 Pandas DataFrame 的 apply 方法三倍薪水

在這個例子中,我們將使用 Pandas DataFrame 的 apply 方法來三倍每個員工的薪水。首先,我們將建立一個 DataFrame,包含員工的姓名、年齡、國家和薪水。

import pandas as pd

# 建立 DataFrame
data = {
    'myname': ['Divya', 'John', 'Emily', 'Michael'],
    'myage': [34, 28, 32, 40],
    'mycountry': ['India', 'USA', 'UK', 'India'],
    'mysalary': [10000, 20000, 30000, 40000]
}
mypd_dataframe = pd.DataFrame(data)

print("原始 DataFrame:")
print(mypd_dataframe)
print('-'*50)

三倍每個員工的薪水

現在,我們將使用 apply 方法來三倍每個員工的薪水。由於我們正在選擇一個欄位,因此我們可以使用 lambda 函式來實作這個操作。

# 三倍每個員工的薪水
mypd_dataframe['mysalary'] = mypd_dataframe['mysalary'].apply(lambda sal: sal*3)

print("三倍薪水後的 DataFrame:")
print(mypd_dataframe)
print('-'*50)

三倍印度員工的薪水

接下來,我們將使用 apply 方法來三倍印度員工的薪水。這次,我們需要定義一個函式來實作這個操作。

# 定義函式來三倍印度員工的薪水
def india_triple_salary(myrow):
    mycountry = myrow[1]
    mysalary = myrow[2]
    if mycountry == 'India':
        myrow[2] = mysalary * 3
    return myrow

# 應用函式到 DataFrame
mypd_dataframe = mypd_dataframe.apply(india_triple_salary, axis=1)

print("三倍印度員工薪水後的 DataFrame:")
print(mypd_dataframe)

圖表翻譯:

  flowchart TD
    A[原始 DataFrame] --> B[三倍薪水]
    B --> C[三倍印度員工薪水]
    C --> D[最終 DataFrame]

在這個例子中,我們使用了 Pandas DataFrame 的 apply 方法來三倍每個員工的薪水和三倍印度員工的薪水。apply 方法是一種強大的工具,可以用來對 DataFrame 中的資料進行各種操作。

個人資料與薪資變動分析

在進行個體薪資變動分析時,我們需要考慮多個因素,包括個人基本資料、工作地點、產業、經驗等。以下是兩組個人資料,分別展示了不同個體的基本資訊和薪資變動情況。

個人基本資料與初始薪資

姓名年齡國家薪資
Mintoo37澳大利亞20000
Yathartha35印度30000
Nilesh43英國40000
Priyanka30美國50000
Saurabh40義大利60000

個人基本資料與變動後薪資

索引姓名年齡國家薪資
0Divya34印度30000
1Mintoo37澳大利亞60000
2Yathartha35印度90000
3Nilesh43英國120000
4Priyanka30美國150000
5Saurabh40義大利180000

內容解密:

上述兩組資料展示了個人基本資訊(姓名、年齡、國家)與其對應的薪資。透過比較初始薪資和變動後的薪資,可以觀察到個體間的薪資變動情況。例如,Mintoo 的薪資從初始的 20000 增加到 60000,表明其薪資有所提升。

  flowchart TD
    A[個人基本資料] --> B[初始薪資]
    B --> C[變動後薪資]
    C --> D[薪資變動分析]

圖表翻譯:

此圖表描述了個人基本資料、初始薪資、變動後薪資之間的邏輯關係。首先,根據個人基本資料(如姓名、年齡、國家),我們可以查詢其初始薪資。接著,透過比較初始薪資和變動後的薪資,我們可以進行薪資變動分析,以瞭解個體間的薪資變動情況。

這種分析對於人力資源管理和薪資調整具有重要意義,因為它能夠幫助企業瞭解員工的價值和貢獻,從而做出更合理的薪資調整決策。同時,對於個人而言,瞭解自己的薪資變動情況也有助於其進行職業規劃和自我評估。

使用Pandas進行資料操作和分析

在這個例子中,我們將使用Pandas函式庫來操作和分析一個包含員薪水料的DataFrame。首先,我們需要匯入Pandas函式庫並建立一個DataFrame。

import pandas as pd

# 建立一個DataFrame
data = {
    'Name': ['Divya', 'Mintoo', 'Yathartha', 'Nilesh', 'Priyanka', 'Saurabh'],
    'Age': [34, 37, 35, 43, 30, 40],
    'Country': ['India', 'Australia', 'India', 'UK', 'USA', 'Italy'],
    'Salary': [90000, 60000, 270000, 120000, 150000, 180000]
}
df = pd.DataFrame(data)

接下來,我們可以使用sort_index方法對DataFrame進行排序。

# 對DataFrame進行排序
df.sort_index(inplace=True)

現在,我們想要新增一個名為MyDesignation的欄位,根據員工的薪水範圍賦予不同的職稱。為了實作這個功能,我們可以定義一個函式designation_func,然後使用apply方法將這個函式套用到每一行資料上。

# 定義一個函式來根據薪水範圍賦予職稱
def designation_func(row):
    if row['Salary'] < 100000:
        return 'Junior'
    elif row['Salary'] < 200000:
        return 'Mid-level'
    else:
        return 'Senior'

# 將函式套用到每一行資料上
df['MyDesignation'] = df.apply(designation_func, axis=1)

最後,我們可以印出更新後的DataFrame。

# 印出更新後的DataFrame
print(df)

內容解密:

  • 我們首先匯入了Pandas函式庫,並建立了一個包含員薪水料的DataFrame。
  • 接下來,我們使用sort_index方法對DataFrame進行排序。
  • 然後,我們定義了一個函式designation_func,根據員工的薪水範圍賦予不同的職稱。
  • 我們使用apply方法將這個函式套用到每一行資料上,新增了一個名為MyDesignation的欄位。
  • 最後,我們印出更新後的DataFrame。

圖表翻譯:

  flowchart TD
    A[建立DataFrame] --> B[排序DataFrame]
    B --> C[定義designation_func]
    C --> D[套用designation_func]
    D --> E[印出更新後的DataFrame]

圖表翻譯:

  • 首先,我們建立了一個包含員薪水料的DataFrame。
  • 接下來,我們對DataFrame進行排序。
  • 然後,我們定義了一個函式designation_func,根據員工的薪水範圍賦予不同的職稱。
  • 我們使用apply方法將這個函式套用到每一行資料上,新增了一個名為MyDesignation的欄位。
  • 最後,我們印出更新後的DataFrame。

薪資等級與職銜對應

根據給定的薪資等級,以下是使用 Python 進行職銜對應的示例程式碼:

import pandas as pd

# 定義薪資等級與職銜對應的函式
def designation_func(row):
    if row['mysalary'] < 25000:
        return 'Worker'
    elif row['mysalary'] < 35000:
        return 'Artisan'
    elif row['mysalary'] < 45000:
        return 'DGM'
    elif row['mysalary'] < 55000:
        return 'AGM'
    else:
        return 'GM'

# 建立示例資料
data = {
    'myname': ['Divya', 'Mintoo', 'Yathartha', 'Nilesh', 'Priyanka', 'Saurabh'],
    'myage': [34, 37, 35, 43, 30, 40],
    'mycountry': ['India', 'Australia', 'India', 'UK', 'USA', 'Italy'],
    'mysalary': [10000, 20000, 30000, 40000, 50000, 60000]
}

# 建立 DataFrame
mypd_dataframe = pd.DataFrame(data)

# 將薪資等級與職銜對應的函式應用於每一行
mypd_dataframe['MyDesignation'] = mypd_dataframe.apply(designation_func, axis=1)

# 列印結果
print(mypd_dataframe)

內容解密:

這段程式碼定義了一個函式 designation_func,用於根據薪資等級對應不同的職銜。然後,建立了一個示例 DataFrame mypd_dataframe,包含員工的姓名、年齡、國籍和薪資。接著,使用 apply 方法將 designation_func 函式應用於每一行,根據薪資等級計算出對應的職銜,並將結果存入新欄位 MyDesignation 中。最後,列印出結果。

圖表翻譯:

以下是薪資等級與職銜對應的流程圖,使用 Mermaid 語法繪製:

  flowchart TD
    A[薪資等級] --> B{mysalary < 25000}
    B -->|true| C[Worker]
    B -->|false| D{mysalary < 35000}
    D -->|true| E[Artisan]
    D -->|false| F{mysalary < 45000}
    F -->|true| G[DGM]
    F -->|false| H{mysalary < 55000}
    H -->|true| I[AGM]
    H -->|false| J[GM]

這個流程圖展示了根據薪資等級對應不同的職銜的邏輯。

使用 Pandas 的 nlargest 和 nsmallest 方法

在使用 Pandas 處理資料時,經常需要根據特定列的值來篩選出最大或最小的資料。Pandas 提供了 nlargestnsmallest 方法來實作這一功能。

nlargest 方法

nlargest 方法用於傳回指定列中最大的 n 個值所對應的行。其語法如下:

nlargest(n, columns, keep='first')

其中:

  • n:指定傳回的行數。
  • columns:指定根據哪一列進行篩選。
  • keep:指定當有多個相同最大值時如何處理,預設為 'first',表示傳回第一個出現的最大值。

nsmallest 方法

nsmallest 方法用於傳回指定列中最小的 n 個值所對應的行。其語法如下:

nsmallest(n, columns, keep='first')

其中:

  • n:指定傳回的行數。
  • columns:指定根據哪一列進行篩選。
  • keep:指定當有多個相同最小值時如何處理,預設為 'first',表示傳回第一個出現的最小值。

示例

下面是一個示例程式碼,展示瞭如何使用 nlargestnsmallest 方法:

import pandas as pd

# 建立一個示例資料框
data = {
    'Name': ['Divya', 'Mintoo', 'Yathartha', 'Nilesh', 'Priyanka', 'Saurabh'],
    'Age': [34, 37, 35, 43, 30, 40],
    'Country': ['India', 'Australia', 'India', 'UK', 'USA', 'Italy'],
    'Salary': [10000, 20000, 30000, 40000, 50000, 60000]
}
df = pd.DataFrame(data)

# 使用 nlargest 方法傳回薪水最高的 3 個人
print(df.nlargest(3, 'Salary'))

# 使用 nsmallest 方法傳回薪水最低的 2 個人
print(df.nsmallest(2, 'Salary'))

輸出結果:

      Name  Age    Country  Salary
4  Priyanka   30        USA   50000
5   Saurabh   40      Italy   60000
2  Yathartha   35      India   30000

      Name  Age Country  Salary
0     Divya   34    India   10000
1     Mintoo   37  Australia   20000

在這個示例中,我們建立了一個資料框,包含了姓名、年齡、國家和薪水等欄位。然後,我們使用 nlargest 方法傳回薪水最高的 3 個人,使用 nsmallest 方法傳回薪水最低的 2 個人。

使用 Pandas 函式庫進行資料分析

在進行資料分析時,Pandas 函式庫是 Python 中的一個強大工具。以下是如何使用 Pandas 來查詢薪水最高和最低的員薪水訊。

資料準備

首先,我們需要準備一個 DataFrame,包含員工的姓名、年齡、國家和薪水等資訊。

import pandas as pd

# 建立一個 DataFrame
data = {
    'myname': ['Divya', 'Mintoo', 'Yathartha', 'Nilesh', 'Priyanka', 'Saurabh'],
    'myage': [34, 37, 35, 43, 30, 40],
    'mycountry': ['India', 'Australia', 'India', 'UK', 'USA', 'Italy'],
    'mysalary': [10000, 20000, 30000, 40000, 50000, 60000]
}
mypd_dataframe = pd.DataFrame(data)

查詢薪水最高的員工

使用 nlargest 方法,可以查詢薪水最高的員工。

print(mypd_dataframe.nlargest(n=4, columns=['mysalary']))

這將輸出薪水最高的 4 名員工的資訊。

查詢薪水最低的員工

使用 nsmallest 方法,可以查詢薪水最低的員工。

print(mypd_dataframe.nsmallest(n=4, columns=['mysalary']))

這將輸出薪水最低的 4 名員工的資訊。

內容解密:

  • mypd_dataframe.nlargest(n=4, columns=['mysalary']):這行程式碼使用 nlargest 方法查詢薪水最高的 4 名員工。n 引數指定要查詢的員工數量,columns 引數指定要根據哪個欄位進行查詢。
  • mypd_dataframe.nsmallest(n=4, columns=['mysalary']):這行程式碼使用 nsmallest 方法查詢薪水最低的 4 名員工。n 引數指定要查詢的員工數量,columns 引數指定要根據哪個欄位進行查詢。

圖表翻譯:

  flowchart TD
    A[資料準備] --> B[查詢薪水最高的員工]
    B --> C[查詢薪水最低的員工]
    C --> D[輸出結果]

這個流程圖展示瞭如何使用 Pandas 函式庫進行資料分析,包括查詢薪水最高和最低的員工。

使用where()方法進行DataFrame過濾

在資料分析中,過濾資料是一個非常重要的步驟。Pandas提供了多種方法來過濾DataFrame,其中一個常用的方法是使用where()

where()方法的語法

where(cond, other=nan, *, inplace: 'bool_t' = False, axis: 'Axis | None' = None, level: 'Level | None' = None)

這個方法的主要引數包括:

  • cond: 過濾條件,可以是一個布林值Series或DataFrame。
  • other: 當條件為False時,替換的值,可以是一個標量、Series或DataFrame。

where()方法的使用

下面是一個示例程式碼,展示瞭如何使用where()方法過濾DataFrame:

import pandas as pd

# 建立一個DataFrame
data = {
    'name': ['Divya', 'Mintoo', 'Yathartha', 'Nilesh', 'Priyanka'],
    'age': [34, 37, 35, 43, 30],
    'country': ['India', 'Australia', 'India', 'UK', 'USA'],
    'salary': [10000, 20000, 30000, 40000, 50000]
}
df = pd.DataFrame(data)

# 使用where()方法過濾DataFrame
filtered_df = df.where(df['salary'] > 25000)

print(filtered_df)

這個程式碼會過濾出薪水大於25000的行。

where()方法的優點

使用where()方法過濾DataFrame有以下優點:

  • 簡單易用:where()方法的語法簡單,易於理解和使用。
  • 高效:where()方法比其他過濾方法更快,因為它使用了向量化操作。
  • 靈活:where()方法可以過濾出複雜的條件,例如多個條件的組合。

使用 Pandas 的 where() 方法進行條件篩選

在 Pandas 中,where() 方法可以根據條件來篩選 DataFrame 中的資料。下面是使用 where() 方法來篩選滿足特定條件的資料列。

篩選條件

首先,我們需要定義篩選條件。在這個例子中,我們想要篩選出來自 ‘India’ 的人員資料。因此,篩選條件是 mycountry 欄位的值等於 ‘India’。

mycond = mypd_dataframe['mycountry'] == 'India'

使用 where() 方法

接下來,我們使用 where() 方法來篩選資料。where() 方法會傳回一個新的 DataFrame,只包含滿足條件的資料列。

print(mypd_dataframe.where(mycond))

輸出結果

輸出結果如下:

     myname  myage mycountry  mysalary
0     Divya   34.0     India    10000.0
1      NaN    NaN      NaN       NaN
2  Yathartha   35.0     India    30000.0
3       NaN    NaN      NaN       NaN
4       NaN    NaN      NaN       NaN
5       NaN    NaN      NaN       NaN

注意,未滿足條件的資料列會被替換為 NaN(Not a Number),表示這些資料列不符合篩選條件。

圖表翻譯

下面的 Mermaid 圖表展示了使用 where() 方法進行篩選的流程:

  flowchart TD
    A[定義篩選條件] --> B[使用 where() 方法]
    B --> C[傳回篩選結果]
    C --> D[輸出結果]

內容解密

在上面的程式碼中,mycond 變數儲存了篩選條件,即 mycountry 欄位的值等於 ‘India’。然後,where() 方法根據這個條件來篩選 DataFrame 中的資料。最終,輸出結果只包含滿足條件的資料列。

這種方法可以方便地根據不同的條件來篩選資料,並傳回一個新的 DataFrame,只包含滿足條件的資料列。

使用Pandas的where()方法進行條件替換

在資料分析中,經常需要根據特定條件對資料進行替換。Pandas提供了where()方法來實作這一功能。下面我們將透過一個例項來瞭解如何使用where()方法。

範例:根據薪水替換

假設我們有一個包含員薪水訊的DataFrame,包括姓名、年齡、國家和薪水。現在,我們想要根據薪水進行替換:如果薪水超過45000,我們將其替換為"Upper limit"。

import pandas as pd

# 載入資料
df = pd.read_csv('query_eg.csv')

# 對索引進行排序
df.sort_index(inplace=True)

# 顯示原始資料
print(df)
print('-'*50)

# 定義替換條件:如果薪水超過45000,替換為"Upper limit"
df['mysalary'] = df['mysalary'].where(lambda x: x <= 45000, other='Upper limit')

# 顯示替換後的資料
print(df)

where()方法解析

  • where()方法適用於Series和DataFrame物件。
  • where()方法的第一個引數是條件,如果條件為True,則傳回原值;如果條件為False,則傳回other引數指定的值。
  • 在上述範例中,lambda x: x <= 45000定義了條件:如果薪水小於或等於45000,則傳回原值;否則,傳回"Upper limit"。

結果

執行上述程式碼後,薪水超過45000的員工,其薪水欄位將被替換為"Upper limit"。

從底層實作到高階應用的全面檢視顯示,Pandas 提供了多元且強大的資料處理與分析方法。本文深入探討了處理欄位名稱空格、資料整理篩選、查詢、轉換、過濾及條件替換等實務操作技巧,涵蓋query()apply()nlargest()nsmallest()where() 等關鍵方法,並佐以程式碼範例和流程圖,有效降低學習門檻。然而,Pandas 的效能瓶頸在處理巨量資料時仍須關注,需搭配其他技術如 Dask 或 Spark 才能完整釋放其潛力。玄貓認為,精通 Pandas 是資料科學家不可或缺的技能,持續探索其進階功能並整合其他技術,方能有效提升資料處理效率並萃取更深層次的商業洞見。接下來,資料科學領域將更著重於資料視覺化和機器學習模型的整合,Pandas 作為資料處理的基本,其重要性將持續提升。