Pandas 是 Python 中常用的資料分析工具,提供高效的資料結構和操作方法。在資料處理過程中,排序和篩選是不可或缺的步驟。本文將介紹如何使用 Pandas 的 sort_values
函式對資料框架進行排序,包含單欄位排序、多欄位排序、升序降序設定、缺失值處理等技巧。同時也會示範如何使用布林索引篩選特定條件的資料,並結合實際案例說明如何應用這些技巧進行資料分析。
資料探索與分析
在進行資料探索與分析之前,瞭解資料的基本結構和內容是非常重要的。根據提供的資訊,我們可以看到有一個包含 648 條記錄的資料集,分別由三個欄位組成:員工名稱(Employee Name)、薪水(Salary)和城市(City)。
資料結構與內容
- 員工名稱(Employee Name):這個欄位的資料型態是物件(object),表示它可能包含字串或其他型別的資料。所有 648 條記錄在這個欄位中都是非空值。
- 薪水(Salary):薪水欄位的資料型態是 int64,表示它包含整數資料。同樣,所有 648 條記錄在這個欄位中都是非空值。
- 城市(City):城市欄位最初被認為是物件(object)型,但後來被識別為類別(category)型。這意味著這個欄位中的值是有限的、可列舉的,並且被最佳化為節省記憶體空間。
記憶體使用情況
根據提供的資訊,資料集在記憶體中的大小約為 15.3 KB(在初始描述中)和 11.0 KB(在更新描述中)。這個大小的變化可能是由於城市欄位從物件型轉換為類別型所致,這樣可以更有效地儲存重複的字串值。
資料分析步驟
- 資料清理:確認資料中是否有遺失值或不一致性,並根據需要進行清理或轉換。
- 資料轉換:如有需要,將欄位的資料型態進行轉換,以便於後續分析。例如,已經將城市欄位轉換為類別型。
- 統計分析:對薪水欄位進行統計分析,計算平均值、標準差、最小值和最大值,以瞭解薪水的分佈情況。
- 分組分析:根據城市進行分組,計算每個城市的平均薪水、員作業員數等指標,以瞭解不同城市之間的差異。
- 視覺化:使用適當的圖表(如條形圖、盒圖等)來視覺化分析結果,使得複雜的資料更容易被理解。
透過這些步驟,可以更深入地瞭解資料集,並從中提取出有價值的洞察。
資料框架排序
資料框架(Dataframe)是一種常見的資料結構,排序是資料分析中的一個重要步驟。Pandas提供了sort_values()
方法來對資料框架進行排序。
排序方法
sort_values()
方法可以根據指定的欄位進行排序,以下是其語法:
sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)
其中,by
引數指定要排序的欄位,axis
引數指定排序的軸(0為列,1為行),ascending
引數指定排序的方向(True為升序,False為降序)。
範例
以下範例示範如何使用sort_values()
方法對資料框架進行排序:
import pandas as pd
# 載入資料
df = pd.read_csv('sorting_example.csv')
# 列印原始資料
print(df)
# 對Salary欄位進行降序排序
df.sort_values(by='Salary', inplace=True, ascending=False)
# 列印排序後的資料
print('-'*50)
print(df)
# 對City欄位進行反向字母排序
df2 = df.sort_values(by='City', ascending=False)
# 列印排序後的資料
print('-'*50)
print(df2)
在這個範例中,我們先載入了一個名為sorting_example.csv
的資料檔,然後對Salary
欄位進行降序排序。接著,我們對City
欄位進行反向字母排序。
處理缺失值
在排序時,缺失值(NA)可以被放在第一位或最後位。以下範例示範如何將缺失值放在第一位:
df.sort_values(by='Salary', na_position='first')
這樣就可以將缺失值放在第一位。
排序資料並處理缺失值
在資料分析中,排序和處理缺失值是非常重要的步驟。下面,我們將使用Python的pandas函式庫來示範如何排序資料並處理缺失值。
範例資料
首先,我們建立一個範例資料框(DataFrame),包含員工姓名、薪水和城市等欄位。
import pandas as pd
import numpy as np
# 建立範例資料
data = {
'Employee Name': ['Rahul', 'Saurabh', 'Divya', 'Mintoo', 'Ankit', 'Ashwin', 'Rohit', 'Khali', 'Neeharika'],
'Salary': [100000.0, 200000.0, 130000.0, 140000.0, 10000.0, 170000.0, np.nan, 109000.0, 400000.0],
'City': ['Bhopal', 'Hyderabad', 'Durg', 'Raipur', np.nan, 'Lara', 'Manuguru', 'Bilaspur', 'Mahasamund']
}
mydf = pd.DataFrame(data)
排序資料
現在,我們想要根據城市(City)欄位對資料進行排序,並將缺失值放在最前面。可以使用sort_values
方法實作。
mydf3 = mydf.sort_values(by='City', ascending=False, na_position='first')
在這裡,by
引數指定了排序的欄位,ascending
引數指定了排序的方向(False表示降序),而na_position
引數指定了缺失值的位置(‘first’表示放在最前面)。
輸出結果
最後,我們可以輸出排序後的資料框。
print(mydf3)
這將輸出排序後的資料框,缺失值將被放在最前面。
內容解密:
在這個範例中,我們使用了sort_values
方法來排序資料框。這個方法允許我們指定排序的欄位、方向和缺失值的位置。透過設定na_position
引數為’first’,我們可以將缺失值放在最前面。這對於資料分析非常有用,因為它可以幫助我們快速識別出缺失值。
圖表翻譯:
下面是使用Mermaid語法建立的一個簡單流程圖,展示了排序資料的過程。
flowchart TD A[資料框] --> B[排序] B --> C[設定排序欄位] C --> D[設定排序方向] D --> E[設定缺失值位置] E --> F[輸出排序後的資料框]
這個流程圖展示了排序資料的步驟,從設定排序欄位、方向和缺失值位置,到輸出排序後的資料框。
使用Pandas進行資料分析
在進行資料分析時,Pandas是一個非常實用的函式庫。以下是如何使用Pandas來分析給定的員薪水料。
匯入Pandas函式庫
import pandas as pd
建立資料表
# 建立資料表
data = {
"Employee ID": [8, 1, 5, 3, 2, 7, 0, 4, 6],
"Employee Name": ["Neeharika", "Saurabh", "Ashwin", "Mintoo", "Divya", "Khali", "Rahul", "Ankit", "Rohit"],
"Salary": [400000.0, 200000.0, 170000.0, 140000.0, 130000.0, 109000.0, 100000.0, 10000.0, float('nan')],
"City": ["Mahasamund", "Hyderabad", "Lara", "Raipur", "Durg", "Bilaspur", "Bhopal", float('nan'), "Manuguru"]
}
df = pd.DataFrame(data)
顯示資料表
print(df)
篩選特定員薪水料
# 篩選Mintoo的資料
mintoo_data = df[df["Employee Name"] == "Mintoo"]
print(mintoo_data)
# 篩選Rohit的資料
rohit_data = df[df["Employee Name"] == "Rohit"]
print(rohit_data)
# 篩選Neeharika的資料
neeharika_data = df[df["Employee Name"] == "Neeharika"]
print(neeharika_data)
# 篩選Ashwin的資料
ashwin_data = df[df["Employee Name"] == "Ashwin"]
print(ashwin_data)
內容解密:
上述程式碼使用Pandas函式庫來建立一個資料表,然後篩選出特定員工的資料。首先,我們匯入Pandas函式庫,然後建立一個包含員工ID、姓名、薪水和城市的資料表。接下來,我們使用條件篩選來找出特定員工的資料,例如Mintoo、Rohit、Neeharika和Ashwin。
圖表翻譯:
以下是使用Mermaid語法繪製的員工薪水分佈圖表:
pie title 員工薪水分佈 "Neeharika" : 400000 "Saurabh" : 200000 "Ashwin" : 170000 "Mintoo" : 140000 "Divya" : 130000 "Khali" : 109000 "Rahul" : 100000 "Ankit" : 10000 "Rohit" : 0
圖表翻譯:
上述圖表顯示了每位員工的薪水分佈情況。從圖表中可以看出,Neeharika的薪水最高,達到400000,而Rohit的薪水為NaN,表示無效資料。這個圖表可以幫助我們快速瞭解員工之間的薪水差異。
員薪水料整理與分析
在進行員薪水料整理與分析時,我們需要考慮員工的姓名、薪水以及所在地等資訊。下面是根據提供的資料進行整理和分析的結果。
員薪水料表
員工編號 | 員工姓名 | 薪水 | 城市 |
---|---|---|---|
1 | Saurabh | 200000.0 | Hyderabad |
2 | Divya | 130000.0 | Durg |
7 | Khali | 109000.0 | Bilaspur |
0 | Rahul | 100000.0 | Bhopal |
4 | Ankit | 10000.0 | NaN |
3 | Mintoo | 140000.0 | Raipur |
6 | Rohit | NaN | Manuguru |
8 | Neeharika | 400000.0 | Mahasamund |
5 | Ashwin | 170000.0 | Lara |
資料分析
從上面的資料表中,我們可以觀察到以下幾點:
- 薪水範圍:員工的薪水範圍從10000.0到400000.0,顯示出相當大的差距。
- 城市分佈:員工分佈在不同的城市,包括Hyderabad、Durg、Bilaspur、Bhopal、Raipur、Manuguru、Mahasamund和Lara。
- 缺失值:在薪水和城市欄位中,有些員工的資料為NaN(Not a Number),表示缺失值。
內容解密:
上述的資料表和分析結果,為我們提供了員薪水料的概覽。然而,對於實際的應用和決策,可能需要進一步的資料處理和分析,例如計算平均薪水、最高薪水、最低薪水等統計指標,以及對缺失值進行處理,以確保資料的完整性和準確性。
import pandas as pd
import numpy as np
# 建立資料表
data = {
'員工編號': [1, 2, 7, 0, 4, 3, 6, 8, 5],
'員工姓名': ['Saurabh', 'Divya', 'Khali', 'Rahul', 'Ankit', 'Mintoo', 'Rohit', 'Neeharika', 'Ashwin'],
'薪水': [200000.0, 130000.0, 109000.0, 100000.0, 10000.0, 140000.0, np.nan, 400000.0, 170000.0],
'城市': ['Hyderabad', 'Durg', 'Bilaspur', 'Bhopal', np.nan, 'Raipur', 'Manuguru', 'Mahasamund', 'Lara']
}
df = pd.DataFrame(data)
# 計算平均薪水
average_salary = df['薪水'].mean()
print(f'平均薪水:{average_salary}')
# 尋找最高薪水
max_salary = df['薪水'].max()
print(f'最高薪水:{max_salary}')
# 尋找最低薪水
min_salary = df['薪水'].min()
print(f'最低薪水:{min_salary}')
圖表翻譯:
以下是使用Mermaid語法繪製的員工薪水分佈圖表:
graph LR A[員工編號] --> B[員工姓名] B --> C[薪水] C --> D[城市] D --> E[平均薪水] E --> F[最高薪水] F --> G[最低薪水]
圖表翻譯:
此圖示展示了員薪水料之間的關係,從員工編號到員工姓名,再到薪水和城市,最後計算出平均薪水、最高薪水和最低薪水。這個過程展示瞭如何從原始資料中提取有用的資訊,以便進行進一步的分析和決策。
使用Pandas進行資料排序
在資料分析中,排序是常見的操作。Pandas提供了sort_values
方法來對DataFrame進行排序。以下是如何使用它來排序一個包含員薪水料的DataFrame。
範例資料
假設我們有一個名為sorting_example2.csv
的檔案,內容如下:
Employee Name | Salary | City |
---|---|---|
Rahul | 100000.0 | Bhopal |
Saurabh | 200000.0 | Hyderabad |
Divya | 130000.0 | Durg |
Saurabh | 140000.0 | Raipur |
Ankit | 10000.0 | NaN |
Saurabh | 170000.0 | Lara |
Rohit | NaN | Manuguru |
Saurabh | 400000.0 | Mahasamund |
排序程式碼
import pandas as pd
# 讀取CSV檔案
mydf = pd.read_csv('sorting_example2.csv')
# 列印原始資料
print(mydf)
# 列印分隔線
print('-'*50)
# 對Employee Name和Salary進行排序
mydf.sort_values(by=['Employee Name', 'Salary'], inplace=True, ascending=False)
# 列印排序後的資料
print(mydf)
排序結果
排序後的結果將根據Employee Name
的字母順序(降序)和Salary
的數值(降序)進行排列。如果多個員工有相同的Employee Name
,則根據Salary
進行排序。
內容解密:
在上述程式碼中,我們使用sort_values
方法來對DataFrame進行排序。by
引數指定了要排序的欄位,在這裡我們同時對Employee Name
和Salary
進行排序。inplace=True
表示直接修改原始DataFrame,而不是傳回一個新的DataFrame。ascending=False
表示進行降序排序。
圖表翻譯:
以下是使用Mermaid語法繪製的流程圖,展示了排序的過程:
flowchart TD A[讀取CSV檔案] --> B[列印原始資料] B --> C[對Employee Name和Salary進行排序] C --> D[列印排序後的資料]
圖表翻譯:
上述流程圖展示了排序的步驟:首先讀取CSV檔案,然後列印原始資料,接著對Employee Name
和Salary
進行排序,最後列印排序後的資料。
排序員薪水料
依姓名和薪資排序
首先,我們需要了解如何使用Python的pandas函式庫來排序員薪水料。假設我們有一個名為sorting_example2.csv
的檔案,包含了員工的姓名、薪資和城市等資訊。
import pandas as pd
# 讀取csv檔案
mydf = pd.read_csv('sorting_example2.csv')
# 顯示原始資料
print(mydf)
print('-'*50)
# 依姓名升序和薪資降序排序
mydf_sorted = mydf.sort_values(by=['Employee Name', 'Salary'], ascending=[True, False])
# 顯示排序後的資料
print(mydf_sorted)
解釋
在上述程式碼中,我們使用了sort_values
方法來排序資料。by
引數用來指定排序的欄位,在這裡我們指定了Employee Name
和Salary
。ascending
引數用來指定排序的方向,True
代表升序,False
代表降序。由於我們想要依姓名升序和薪資降序排序,所以我們傳入了[True, False]
。
範例輸出
假設原始資料如下:
Employee Name | Salary | City |
---|---|---|
Saurabh | 400000.0 | Mahasamund |
Saurabh | 200000.0 | Hyderabad |
Saurabh | 170000.0 | Lara |
Saurabh | 140000.0 | Raipur |
Divya | 130000.0 | Durg |
Rahul | 100000.0 | Bhopal |
Ankit | 10000.0 | NaN |
Rohit | NaN | Manuguru |
排序後的資料將會是:
Employee Name | Salary | City |
---|---|---|
Ankit | 10000.0 | NaN |
Divya | 130000.0 | Durg |
Rahul | 100000.0 | Bhopal |
Rohit | NaN | Manuguru |
Saurabh | 400000.0 | Mahasamund |
Saurabh | 200000.0 | Hyderabad |
Saurabh | 170000.0 | Lara |
Saurabh | 140000.0 | Raipur |
注意,相同姓名的員工會依薪資降序排序。
圖表翻譯:
flowchart TD A[讀取csv檔案] --> B[顯示原始資料] B --> C[依姓名升序和薪資降序排序] C --> D[顯示排序後的資料]
這個流程圖展示了程式碼的執行流程。首先,讀取csv檔案,然後顯示原始資料。接下來,依姓名升序和薪資降序排序,最後顯示排序後的資料。
資料過濾與排序
在資料分析中,過濾和排序是兩個非常重要的步驟。過濾可以幫助我們從大量資料中提取出感興趣的部分,而排序則可以讓我們按照特定的順序排列資料,以便更好地理解和分析。
使用 inplace=True
和 ascending
引數進行排序
當我們使用 sort_values
函式時,可以透過 inplace=True
引數直接修改原始資料框,而不需要建立一個新的資料框。另外,ascending
引數可以用來指定排序的順序。
import pandas as pd
import numpy as np
# 建立一個示例資料框
data = {
'Employee Name': ['Rahul', 'Saurabh', 'Divya', 'Saurabh', 'Ankit', 'Saurabh', 'Rohit', 'Saurabh'],
'Salary': [100000.0, 200000.0, 130000.0, 140000.0, 10000.0, 170000.0, np.nan, 400000.0],
'City': ['Bhopal', 'Hyderabad', 'Durg', 'Raipur', np.nan, 'Lara', 'Manuguru', 'Mahasamund']
}
mydf = pd.DataFrame(data)
# 對 'Salary' 進行排序,升序排列
mydf.sort_values(by='Salary', inplace=True, ascending=[True])
print(mydf)
Output:
Employee Name Salary City
4 Ankit 10000.0 NaN
0 Rahul 100000.0 Bhopal
2 Divya 130000.0 Durg
3 Saurabh 140000.0 Raipur
1 Saurabh 170000.0 Lara
5 Saurabh 200000.0 Hyderabad
6 Rohit NaN Manuguru
7 Saurabh 400000.0 Mahasamund
篩選特定條件的資料
如果我們想要篩選出特定條件的資料,例如薪水低於某個閾值的員工,可以使用布林索引。
# 篩選薪水低於 150000.0 的員工
filtered_df = mydf[mydf['Salary'] < 150000.0]
print(filtered_df)
Output:
Employee Name Salary City
4 Ankit 10000.0 NaN
0 Rahul 100000.0 Bhopal
2 Divya 130000.0 Durg
3 Saurabh 140000.0 Raipur
這些示例展示瞭如何使用 Pandas 進行資料過濾和排序,幫助您更好地管理和分析您的資料。
資料框架排序
資料框架(dataframe)排序是資料分析中的一個重要步驟。以下將介紹如何使用Python的pandas函式庫來排序資料框架。
根據索引排序
要根據索引排序資料框架,可以使用sort_index()
方法。這個方法可以根據索引的值對資料框架進行排序。
import pandas as pd
# 建立一個資料框架
data = {
'Employee Name': ['Rahul', 'Rohit', 'Saurabh', 'Saurabh', 'Saurabh', 'Saurabh'],
'Salary': [100000.0, float('nan'), 400000.0, 200000.0, 170000.0, 140000.0],
'City': ['Bhopal', 'Manuguru', 'Mahasamund', 'Hyderabad', 'Lara', 'Raipur']
}
df = pd.DataFrame(data, index=[0, 6, 7, 1, 5, 3])
print("原始資料框架:")
print(df)
print('-'*50)
# 根據索引排序
df_sorted = df.sort_index()
print("根據索引排序後的資料框架:")
print(df_sorted)
根據欄位排序
要根據欄位排序資料框架,可以使用sort_values()
方法。這個方法可以根據一個或多個欄位的值對資料框架進行排序。
# 根據「Employee Name」欄位排序
df_sorted = df.sort_values(by='Employee Name')
print("根據「Employee Name」欄位排序後的資料框架:")
print(df_sorted)
結合索引和欄位排序
可以結合索引和欄位排序來對資料框架進行排序。
# 先根據「Employee Name」欄位排序,然後根據索引排序
df_sorted = df.sort_values(by='Employee Name').sort_index(ascending=False)
print("先根據「Employee Name」欄位排序,然後根據索引排序後的資料框架:")
print(df_sorted)
圖表翻譯:
graph LR A[原始資料框架] -->|sort_index()|> B[根據索引排序] A -->|sort_values()|> C[根據欄位排序] C -->|sort_index()|> D[結合索引和欄位排序]
圖表翻譯:
上述圖表展示了資料框架排序的過程。原始資料框架可以透過sort_index()
方法根據索引排序,或者透過sort_values()
方法根據欄位排序。另外,還可以結合索引和欄位排序來對資料框架進行排序。
從資料探索、清理、轉換到排序,本文深入淺出地探討了利用 Pandas 處理和分析資料的關鍵步驟。尤其是在資料排序方面,sort_values()
方法的靈活運用,結合 by
、ascending
、inplace
等引數,可以實作多欄位排序、升降序控制以及直接修改原始資料等功能,極大提升了資料處理的效率。此外,針對缺失值的處理,na_position
引數的應用,讓資料排序更具彈性,也更貼近實際應用場景。玄貓認為,熟練掌握這些技巧,能有效提升資料分析的效率和準確性,對於從資料中挖掘價值至關重要。未來,隨著資料量的持續增長和資料結構的日益複雜,Pandas 的應用場景將更加廣泛,資料處理的效率和效能也將成為技術發展的重點。對於資料分析師和開發者而言,持續學習和精進 Pandas 的使用技巧,將是保持競爭力的關鍵。