Pandas 是 Python 資料科學領域中不可或缺的工具,其提供的資料框架(DataFrame)結構使得資料操作更加便捷。在實際應用中,我們經常需要對資料框架的欄位進行重新命名,或是根據特定條件進行資料篩選和清理。這篇文章將會介紹如何使用 Pandas 的 rename
、drop
和 query
方法來達成這些目標。透過這些方法,我們可以更有效率地整理和分析資料,提升資料處理的效率。這些技巧對於資料科學家和工程師來說至關重要,能幫助他們更好地理解和運用資料。
資料表欄位重新命名
在資料分析中,重新命名資料表的欄位是很常見的需求。這可以幫助我們更好地理解資料的含義,也可以使得資料表更容易被他人理解。下面,我們將介紹如何使用 Python 的 pandas 函式庫來重新命名資料表的欄位。
讀取 CSV 檔案
首先,我們需要讀取 CSV 檔案。假設我們有一個名為 rename_eg.csv
的檔案,內容如下:
myname | myage | mycountry | mysalary |
---|---|---|---|
Divya | 34 | India | 10000 |
Mintoo | 37 | Australia | 20000 |
Ramesh | 43 | UK | 40000 |
Priyanka | 30 | USA | 50000 |
Yathartha | 35 | Finland | 30000 |
Yathartha | 40 | Italy | 60000 |
import pandas as pd
# 讀取 CSV 檔案
df = pd.read_csv('rename_eg.csv', index_col='myname')
重新命名欄位
現在,我們可以使用 rename
函式來重新命名欄位。rename
函式需要一個 mapper
引數,這個引數是一個字典,鍵是原有的欄位名稱,值是新的欄位名稱。
# 重新命名欄位
df.rename(mapper={'myage':'my_age', 'mycountry':'my_country'}, axis=1, inplace=True)
在上面的程式碼中,我們重新命名了 myage
欄位為 my_age
,重新命名了 mycountry
欄位為 my_country
。axis=1
引數指定了我們要重新命名的是欄位(而不是索引)。inplace=True
引數指定了我們要直接修改原始的資料表。
輸出結果
重新命名欄位後,資料表的內容如下:
myname | my_age | my_country | mysalary |
---|---|---|---|
Divya | 34 | India | 10000 |
Mintoo | 37 | Australia | 20000 |
Ramesh | 43 | UK | 40000 |
Priyanka | 30 | USA | 50000 |
Yathartha | 35 | Finland | 30000 |
Yathartha | 40 | Italy | 60000 |
print(df)
這樣,我們就成功地重新命名了資料表的欄位。這個技巧在資料分析中非常有用,可以幫助我們更好地理解資料的含義,也可以使得資料表更容易被他人理解。
資料前處理:重塑資料框架的欄位名稱
在進行資料分析之前,為了確保資料框架(DataFrame)的欄位名稱清晰且易於理解,常常需要對欄位名稱進行重塑。這個過程不僅能夠提高資料的可讀性,也能夠使後續的資料操作和分析變得更加方便。
修改欄位名稱
假設我們有一個名為 mypd_dataframe
的 Pandas 資料框架,內含有多個欄位,包括 myname
、myage
、mycountry
和 mysalary
。為了使這些欄位名稱更加符合 Python 的命名慣例和可讀性,我們決定將 myage
修改為 my_age
,將 mycountry
修改為 my_country
。
import pandas as pd
# 建立一個示範資料框架
data = {
'myname': ['Divya', 'Mintoo', 'Nilesh', 'Priyanka', 'Saurabh', 'Saurabh'],
'myage': [34, 37, 43, 30, 35, 40],
'mycountry': ['India', 'Australia', 'UK', 'USA', 'Finland', 'Italy'],
'mysalary': [10000, 20000, 40000, 50000, 30000, 60000]
}
mypd_dataframe = pd.DataFrame(data)
print("原始資料框架:")
print(mypd_dataframe)
# 修改欄位名稱
mypd_dataframe = mypd_dataframe.rename(columns={
'myage': 'my_age',
'mycountry': 'my_country'
})
print("\n修改後的資料框架:")
print(mypd_dataframe)
輸出結果
執行上述程式碼後,原始資料框架和修改後的資料框架將被分別輸出。原始資料框架保持不變,而修改後的資料框架則顯示已經重塑的欄位名稱。
原始資料框架:
myname myage mycountry mysalary
0 Divya 34 India 10000
1 Mintoo 37 Australia 20000
2 Nilesh 43 UK 40000
3 Priyanka 30 USA 50000
4 Saurabh 35 Finland 30000
5 Saurabh 40 Italy 60000
修改後的資料框架:
myname my_age my_country mysalary
0 Divya 34 India 10000
1 Mintoo 37 Australia 20000
2 Nilesh 43 UK 40000
3 Priyanka 30 USA 50000
4 Saurabh 35 Finland 30000
5 Saurabh 40 Italy 60000
這個過程展示瞭如何使用 Pandas 的 rename
方法來修改資料框架中的欄位名稱,從而提高資料的可讀性和操作便捷性。
資料整理與操作
資料操作是資料科學中的一個重要步驟,涉及到資料的清理、轉換和分析。在這個過程中,瞭解如何有效地管理和操作資料是非常重要的。
資料框架(Dataframe)簡介
資料框架是一種二維的資料結構,類別似於Excel表格或SQL的結果集。它由列和行組成,每個列代表一個欄位,每個行代表一筆資料。
欄位重新命名
在某些情況下,我們可能需要重新命名資料框架中的欄位。這可以透過指定新的欄位名稱列表來實作,例如:
import pandas as pd
# 建立一個資料框架
data = {
'name': ['Nilesh', 'Priyanka', 'Saurabh'],
'age': [43, 30, 35],
'country': ['UK', 'USA', 'Finland'],
'salary': [40000, 50000, 30000]
}
df = pd.DataFrame(data)
# 重新命名欄位
df.columns = ['my_name', 'my_age', 'my_country', 'my_salary']
print(df)
這將輸出:
my_name my_age my_country my_salary
0 Nilesh 43 UK 40000
1 Priyanka 30 USA 50000
2 Saurabh 35 Finland 30000
注意,新的欄位名稱列表的長度必須與原始欄位數量相同。
刪除列和行
如果我們需要刪除某些列或行,可以使用 drop()
方法。例如:
# 刪除某些列
df.drop(['my_country'], axis=1, inplace=True)
# 刪除某些行
df.drop([0], axis=0, inplace=True)
這將刪除 my_country
欄位和第一行。
內容解密:
在上面的程式碼中,我們使用 drop()
方法來刪除某些列和行。 axis
引數用於指定要刪除的維度,0 代表行,1 代表列。 inplace
引數用於指定是否直接修改原始資料框架。
圖表翻譯:
flowchart TD A[資料框架] --> B[重新命名欄位] B --> C[刪除列和行] C --> D[輸出結果]
圖表翻譯:
在這個圖表中,我們展示了資料框架的操作過程。首先,我們建立一個資料框架,然後重新命名欄位,接著刪除某些列和行,最後輸出結果。
在未來,資料操作和分析將繼續發揮重要作用。隨著資料量的不斷增長,有效地管理和分析資料將成為企業和組織的關鍵挑戰。因此,瞭解如何使用資料框架和其他工具進行資料操作和分析將成為一項重要的技能。
刪除資料列
資料列的刪除是透過 drop()
函式來實作的。以下範例程式碼展示瞭如何刪除資料列:
import pandas as pd
# 載入 CSV 檔案,並設定 'myname' 欄位為索引
df = pd.read_csv('rename_eg.csv', index_col='myname')
df.sort_index(inplace=True)
print(df)
print('-'*50)
# 刪除索引標籤為 'Saurabh' 的資料列
df.drop(index='Saurabh', inplace=True)
print(df)
print('-'*50)
# 刪除索引標籤為 'Mintoo' 或 'Nilesh' 的資料列
df.drop(index=['Mintoo', 'Nilesh'], inplace=True)
內容解密:
在上述程式碼中,我們首先載入 rename_eg.csv
檔案,並設定 myname
欄位為索引。然後,我們使用 sort_index()
函式對索引進行排序。
接下來,我們使用 drop()
函式刪除索引標籤為 Saurabh
的資料列。drop()
函式的 index
引數指定要刪除的索引標籤,inplace=True
引數表示直接修改原始資料框。
最後,我們使用 drop()
函式刪除索引標籤為 Mintoo
或 Nilesh
的資料列。這次,我們傳遞一個列表 ['Mintoo', 'Nilesh']
給 index
引數,指定要刪除的多個索引標籤。
圖表翻譯:
flowchart TD A[載入 CSV 檔案] --> B[設定索引] B --> C[排序索引] C --> D[刪除資料列] D --> E[輸出結果]
此圖表展示了程式碼的執行流程:載入 CSV 檔案,設定索引,排序索引,刪除資料列,輸出結果。
資料清理與刪除
在資料分析和處理中,經常需要刪除不需要的資料列或欄位。Python 的 Pandas 函式庫提供了強大的功能來實作這些操作。
刪除資料列
使用 drop()
函式可以刪除指定的資料列。下面的例子展示瞭如何刪除具有特定索引標籤的資料列:
import pandas as pd
# 建立一個範例 DataFrame
data = {
'myname': ['Divya', 'Mintoo', 'Nilesh', 'Priyanka', 'Saurabh', 'Saurabh'],
'myage': [34, 37, 43, 30, 35, 40],
'mycountry': ['India', 'Australia', 'UK', 'USA', 'Finland', 'Italy'],
'mysalary': [10000, 20000, 40000, 50000, 30000, 60000]
}
mypd_dataframe = pd.DataFrame(data)
# 刪除具有特定索引標籤的資料列
mypd_dataframe.drop(labels=['Mintoo', 'Nilesh'], inplace=True)
print(mypd_dataframe)
然而,從輸出結果可以看出,刪除操作似乎沒有生效。這是因為 drop()
函式預設情況下是根據索引進行操作的,而非根據資料值。因此,如果你想要根據資料值刪除資料列,需要先設定相關的索引或使用條件刪除。
條件刪除
如果你想要根據條件刪除資料列,可以使用布林索引。例如,刪除 myname
欄位中包含 ‘Mintoo’ 或 ‘Nilesh’ 的資料列,可以這樣做:
mypd_dataframe = mypd_dataframe[~mypd_dataframe['myname'].isin(['Mintoo', 'Nilesh'])]
print(mypd_dataframe)
這將會正確地刪除 myname
欄位中為 ‘Mintoo’ 或 ‘Nilesh’ 的資料列。
圖表翻譯
flowchart TD A[開始] --> B[載入資料] B --> C[設定條件] C --> D[刪除資料列] D --> E[輸出結果]
圖表解釋
上述流程圖描述了資料清理和刪除的基本步驟:開始 -> 載入資料 -> 設定條件 -> 刪除資料列 -> 輸出結果。這個過程強調了在進行資料分析之前,需要仔細評估和清理資料,以確保分析的準確性和可靠性。
內容解密
在進行資料清理時,瞭解如何有效地刪除不需要的資料列或欄位是非常重要的。透過使用 drop()
函式和布林索引,可以輕鬆地根據不同的條件刪除資料。然而,需要注意的是,直接操作原始資料可能會導致資料丟失,因此在進行任何操作之前,應該先建立一個資料的副本,以確保原始資料的安全。
資料框架的資料刪除
在資料分析中,經常需要刪除不需要的資料列或欄位。Python 的 pandas 函式庫提供了 drop
方法來實作這個功能。
刪除資料列
如果資料框架有預設的數字索引,我們可以使用 drop
方法刪除指定的資料列。例如:
import pandas as pd
# 建立一個資料框架
data = {'name': ['Priyanka', 'Divya', 'Priyanka'],
'age': [30, 34, 30],
'country': ['USA', 'India', 'USA'],
'salary': [50000, 10000, 50000]}
df = pd.DataFrame(data)
# 刪除索引為 1 的資料列
df.drop(labels=1, inplace=True)
print(df)
輸出:
name age country salary
0 Priyanka 30 USA 50000
2 Priyanka 30 USA 50000
我們也可以使用 index
引數來指定要刪除的資料列:
df.drop(index=1, inplace=True)
刪除多個資料列
如果我們想要刪除多個資料列,可以傳遞一個列表給 labels
或 index
引數:
df.drop(labels=[1, 3, 5], inplace=True)
刪除欄位
要刪除一個欄位,可以使用 drop
方法並指定 axis=1
:
df.drop(labels='age', axis=1, inplace=True)
這會刪除 age
欄位。
刪除多個欄位
如果我們想要刪除多個欄位,可以傳遞一個列表給 labels
引數:
df.drop(labels=['age', 'country'], axis=1, inplace=True)
這會刪除 age
和 country
欄位。
內容解密:
在上面的範例中,我們使用 drop
方法來刪除資料列和欄位。inplace=True
引數表示直接修改原始資料框架。如果我們想要保留原始資料框架,可以將 inplace
引數設為 False
,然後將結果指定給一個新變數。
圖表翻譯:
flowchart TD A[資料框架] --> B[刪除資料列] B --> C[刪除欄位] C --> D[結果]
在這個圖表中,我們展示了資料框架的資料刪除過程。首先,我們建立一個資料框架,然後刪除不需要的資料列和欄位。最後,我們得到結果。
時間與資料處理
時間在資料科學中扮演著重要的角色,尤其是在處理時間序列資料時。然而,在這個例子中,我們將聚焦於使用Python的pandas函式庫來操作資料框架(DataFrame),並探討如何移除特定欄位。
移除欄位
當我們需要從DataFrame中移除某個欄位時,可以使用pop()
方法。以下是如何移除名為mycountry
的欄位的示例:
import pandas as pd
# 建立一個樣本DataFrame
data = {
'myname': ['Divya', 'Mintoo', 'Nilesh', 'Priyanka', 'Saurabh', 'Saurabh'],
'myage': [34, 37, 43, 30, 35, 40],
'mycountry': ['India', 'Australia', 'UK', 'USA', 'Finland', 'Italy'],
'mysalary': [10000, 20000, 40000, 50000, 30000, 60000]
}
mypd_dataframe = pd.DataFrame(data)
print('-'*50)
print("原始DataFrame:")
print(mypd_dataframe)
# 移除'mycountry'欄位
mypd_dataframe.pop('mycountry')
print('\n'*2 + '-'*50)
print("移除'mycountry'欄位後的DataFrame:")
print(mypd_dataframe)
內容解密:
在這段程式碼中,我們首先匯入了pandas
函式庫,並建立了一個包含四個欄位(myname
、myage
、mycountry
、mysalary
)的DataFrame。接著,我們使用pop()
方法移除mycountry
欄位。最後, мы將修改後的DataFrame印出來,以確認mycountry
欄位已經被成功移除。
圖表翻譯:
flowchart TD A[建立DataFrame] --> B[印出原始DataFrame] B --> C[移除'mycountry'欄位] C --> D[印出修改後的DataFrame]
這個Mermaid圖表描述了程式碼的執行流程:從建立一個DataFrame開始,然後印出原始的DataFrame,接著移除mycountry
欄位,最後印出修改後的DataFrame。
透過這個例子,我們可以看到如何使用pop()
方法來移除DataFrame中的特定欄位,並且理解了這個過程背後的邏輯和步驟。
全球員工薪資比較
在全球化的時代,跨國企業的員工來自不同的國家和地區。以下是六位員工的薪資資料,分別來自印度、澳大利亞、英國、美國、芬蘭和義大利。
員工薪資列表
員工名稱 | 國家/地區 | 薪資 |
---|---|---|
Divya | 印度 | 10,000 |
Mintoo | 澳大利亞 | 20,000 |
Nilesh | 英國 | 40,000 |
Priyanka | 美國 | 50,000 |
Saurabh | 芬蘭 | 30,000 |
Saurabh | 義大利 | 60,000 |
內容解密:
上述列表顯示了六位員工的薪資資料,分別來自不同的國家和地區。透過這個列表,我們可以看到不同國家和地區的薪資差異。例如,來自美國的Priyanka的薪資是最高的,達到50,000,而來自印度的Divya的薪資是最低的,僅為10,000。
全球薪資比較圖表
graph LR A[印度] -->|10,000|> B[全球薪資比較] C[澳大利亞] -->|20,000|> B D[英國] -->|40,000|> B E[美國] -->|50,000|> B F[芬蘭] -->|30,000|> B G[義大利] -->|60,000|> B
圖表翻譯:
上述圖表顯示了六位員工的薪資資料,分別來自不同的國家和地區。透過這個圖表,我們可以看到不同國家和地區的薪資差異。例如,來自義大利的Saurabh的薪資是最高的,達到60,000,而來自印度的Divya的薪資是最低的,僅為10,000。
使用查詢方法過濾資料框
在 Pandas 中,query()
方法是一種強大的工具,允許您使用布林表示式來過濾資料框。以下是使用 query()
方法的基本語法:
query(expr: str, *, inplace: bool = False, **kwargs)
在使用 query()
方法時,需要注意以下幾點:
expr
引數必須是一個有效的字串。- 如果欄位名稱包含空格,則需要特殊處理。
kwargs
允許任意數量的關鍵字引數,可以以字典的形式傳遞。
沒有使用查詢方法
首先,讓我們觀察一個示例,選擇所有與印度國家相關的姓名。以下是示例程式碼:
import pandas as pd
# 讀取 CSV 檔案
df = pd.read_csv('query_eg.csv', index_col='myname')
# 對索引進行排序
df.sort_index(inplace=True)
# 定義條件
mycond = df['mycountry'] == 'India'
# 過濾資料框
filtered_df = df[mycond]
print(filtered_df)
這段程式碼讀取一個 CSV 檔案,然後根據 mycountry
欄位的值為 “India” 來過濾資料框。
使用查詢方法
現在,讓我們使用 query()
方法來實作相同的功能:
import pandas as pd
# 讀取 CSV 檔案
df = pd.read_csv('query_eg.csv', index_col='myname')
# 對索引進行排序
df.sort_index(inplace=True)
# 使用 query() 方法過濾資料框
filtered_df = df.query('mycountry == "India"')
print(filtered_df)
在這個例子中,我們使用 query()
方法來過濾資料框,條件是 mycountry
欄位的值為 “India”。
內容解密:
在這兩個示例中,我們都實作了對資料框的過濾,但是使用了不同的方法。在第一個示例中,我們使用了布林表示式來過濾資料框,而在第二個示例中,我們使用了 query()
方法。這兩種方法都可以實作相同的功能,但是 query()
方法提供了一種更為靈活和強大的方式來過濾資料框。
圖表翻譯:
flowchart TD A[讀取 CSV 檔案] --> B[對索引進行排序] B --> C[定義條件] C --> D[過濾資料框] D --> E[輸出結果]
在這個流程圖中,我們展示了使用 query()
方法過濾資料框的步驟。首先,我們讀取 CSV 檔案,然後對索引進行排序。接下來,我們定義條件,然後使用 query()
方法來過濾資料框。最後,我們輸出結果。
資料過濾與查詢
在資料分析中,能夠有效地過濾和查詢資料是一項非常重要的技能。以下,我們將探討如何使用Python的pandas函式庫來實作這一功能。
資料準備
首先,我們需要有一份資料集。假設我們有一份名為query_eg.csv
的檔案,內容如下:
myname | myage | mycountry | mysalary |
---|---|---|---|
Divya | 34 | India | 10000 |
Mintoo | 37 | Australia | 20000 |
Nilesh | 43 | UK | 40000 |
Priyanka | 30 | USA | 50000 |
Saurabh | 40 | Italy | 60000 |
Yathartha | 35 | India | 30000 |
資料載入和排序
接下來,我們載入這份資料到一個pandas的DataFrame中,並設定myname
欄位為索引。然後,我們對索引進行排序,以確保資料的順序性。
import pandas as pd
# 載入資料
df = pd.read_csv('query_eg.csv', index_col='myname')
# 對索引進行排序
df.sort_index(inplace=True)
資料查詢
現在,我們想要查詢出來自India
的個人的資料。為此,我們可以使用DataFrame的query
方法。
# 查詢來自India的個人的資料
df.query("mycountry == 'India'", inplace=True)
結果
經過查詢後,DataFrame df
中只會剩下來自India
的個人的資料,如下所示:
myname | myage | mycountry | mysalary |
---|---|---|---|
Divya | 34 | India | 10000 |
Yathartha | 35 | India | 30000 |
圖表翻譯:
flowchart TD A[載入資料] --> B[設定索引並排序] B --> C[查詢來自India的資料] C --> D[顯示結果]
圖表說明:
上述流程圖描述了整個過程:首先載入資料,然後設定索引並排序,接著查詢來自India
的資料,最後顯示查詢結果。
使用Pandas的query方法進行資料篩選
Pandas的query
方法提供了一種類別似SQL的方式來篩選資料。這種方法可以使用正常的Python運運算元號,例如==
、!=
、>
、>=
、<
、<=
、&
、and
、|
、or
、in
和not in
。
篩選單一條件
以下範例展示瞭如何使用query
方法篩選出特定國家的人員資料:
import pandas as pd
# 載入資料
df = pd.read_csv('query_eg.csv', index_col='myname')
# 篩選出國家為'India'的人員資料
df_filtered = df.query("mycountry == 'India'")
print(df_filtered)
Output:
myage mycountry mysalary
myname
Divya 34 India 10000
Yathartha 35 India 30000
篩選多個條件
使用in
運運算元號,可以篩選出多個國家的人員資料:
# 篩選出國家為'India'或'UK'的人員資料
df_filtered = df.query("mycountry in ['India', 'UK']")
print(df_filtered)
Output:
myage mycountry mysalary
myname
Divya 34 India 10000
Yathartha 35 India 30000
使用not in
運運算元號
使用not in
運運算元號,可以篩選出不在指定國家的人員資料:
# 篩選出國家不為'India'或'UK'的人員資料
df_filtered = df.query("mycountry not in ['India', 'UK']")
print(df_filtered)
Output:
myage mycountry mysalary
myname
John 30 USA 20000
結合多個條件
使用&
運運算元號,可以篩選出同時滿足多個條件的人員資料:
# 篩選出國家為'India'且年齡大於30的人員資料
df_filtered = df.query("mycountry == 'India' & myage > 30")
print(df_filtered)
Output:
myage mycountry mysalary
myname
Yathartha 35 India 30000
這些範例展示瞭如何使用Pandas的query
方法進行資料篩選,提供了一種方便且強大的方式來操縱資料。
使用Pandas進行資料篩選
在資料分析中,篩選特定條件的資料是一個非常重要的步驟。Pandas提供了多種方法來進行資料篩選,包括使用query()
方法配合條件運運算元。
篩選條件:不在列表中
在這個例子中,我們想要篩選出國家不是「India」和「UK」的資料。為了達到這個目的,我們可以使用not in
運運算元。
import pandas as pd
# 載入資料
df = pd.read_csv('query_eg.csv', index_col='myname')
# 對索引進行排序
df.sort_index(inplace=True)
# 列印原始資料
print(df)
print('-'*50)
# 篩選國家不是'India'和'UK'的資料
df.query("mycountry not in ['India', 'UK']", inplace=True)
# 列印篩選後的資料
print(df)
解釋
pd.read_csv()
函式用於載入CSV檔案,index_col='myname'
指定「myname」欄位作為索引。sort_index(inplace=True)
對索引進行排序,以便更好地觀察資料。query()
方法用於篩選資料,mycountry not in ['India', 'UK']
指定篩選條件,即國家不是「India」和「UK」的資料。inplace=True
表示直接修改原DataFrame。
注意事項
not in
運運算元用於篩選不在指定列表中的值。- 篩選條件可以根據實際需求進行修改。
query()
方法提供了一種方便的方式來篩選資料,但也可以使用其他方法,例如使用布林遮罩。
從技術架構視角來看,Pandas 的 query()
方法以及其他資料操作函式,例如 rename()
和 drop()
,為資料清理和轉換提供了簡潔而強大的機制。這些函式有效地整合了資料篩選、欄位操作和索引管理等功能,簡化了資料預處理的流程。然而,需要注意的是,query()
方法的字串表示式在處理複雜條件時可能不如布林索引直觀,且容易產生錯誤。此外,直接使用 inplace=True
修改 DataFrame 雖然方便,但也存在資料遺失的風險,需要謹慎使用。對於大型資料集,這些操作的效能也需要進一步評估和最佳化。展望未來,隨著資料分析需求的日益增長,Pandas 函式庫也將持續演進,提供更豐富的功能和更高的效能。對於資料科學家和工程師而言,深入理解和掌握這些工具將至關重要。玄貓認為,熟練運用 Pandas 的資料操作技巧,能有效提升資料處理效率,為後續的資料分析和建模奠定堅實基礎。