排序Pandas數據框
Pandas數據框可以按索引和值排序
我們可以按行值/列值對Pandas數據框進行排序。同樣,我們也可以按行索引/列索引進行排序。
Pandas DataFrame按值排序
DataFrame。sort_values(by,axis = 0,ascending = True,inplace = False,kind =' quicksort ',na_position ='last',ignore_index = False,key = None)
返回類型為 DataFrame或無。
如果排序的inplace返回類型為None,則為DataFrame。
1.按一列對數據框進行排序
通過從CSV文件讀取來創建DataFrame。
import pandas as pd df=pd.read_csv("C:\pandas_experiment\pandas_sorting\data1.csv") df
現在,按一列(EmpId)中的值對數據框進行排序。
df.sort_values('EmpID')
默認情況下,它將以升序排序。該索引也將保持不變。
返回類型是一個數據框。它不會修改原始數據框。
2.按一列按降序對數據框進行排序
按列EmpID降序對數據框進行排序。不得不提ascending=False。
返回類型是一個數據框。它不會修改原始數據框。
df.sort_values(‘EmpID’,ascending=False)
3.按兩列對數據框進行排序
按列Skill和排序數據框EmpID。如果列Skill 中的值相同,則它將基於第二列中的值進行排序EmpID
df.sort_values(by=['Skill','EmpID'])
首先,它將基於“Skill”列中的值進行排序。由於JavaScript列中的值Skill相同,因此它將再次按值EmpID 升序排序。
返回類型是一個數據框。它不會修改原始數據框。
4.按兩列以不同順序對數據框進行排序
按列Skill和排序數據框EmpID。一列以升序排列,另一列以降序排列。
df.sort_values(by=['Skill','EmpID'],ascending=[True,False])
首先,數據幀將基於“Skill” 列中的值以升序排序。由於JavaScript列中的值Skill相同,因此它將按值EmpID 降序排序。
返回類型是一個數據框。它不會修改原始數據框。
5.通過將NaN放在首位對數據幀進行排序
首先將缺失值放在數據NaN框中進行排序。na_position=”first”
df.sort_values("Salary",na_position='first')
返回類型是一個數據框。它不會修改原始數據框。
6.就地排序數據框
如果參數inplace設置為True(inplace=True),它將執行就地操作。修改原始數據框本身。返回類型為無。
df.sort_values("Salary",inplace=True) df
7.通過忽略索引對數據幀進行排序。
對數據框進行排序將保持相同的索引。如果要忽略索引,然后不得不提及ignore_index=True
,則結果軸將標記為0、1,…,n-1。
df.sort_values("Salary",ignore_index=True)
8.使用鍵功能對數據框進行排序
在排序之前,將鍵函數應用於這些值。這類似於內置sorted()函數中的key參數,但值得注意的區別是此key函數應被向量化。它應該期望aSeries並返回與輸入形狀相同的Series。它將by獨立應用於每個列。- Python文檔
df.sort_values(by=["Skill"],key=lambda x:x.str.lower())
鍵功能(str.lower())應用於“Skill” 列中的所有值,然后進行排序。如果包含相同的值,則基於行索引進行排序。
如果未在“Skill”列上調用鍵函數,則大寫字母將首先排序。
df.sort_values(by=["Skill"])
9.按字符串長度對數據框進行排序
按字符串長度對數據框進行排序。給出了鍵函數,它將計算給定列()中值的長度。根據列中值的長度,它將對數據框進行排序。key=lambda x:x.str.len()“SKill”“Skill”
df.sort_values(by=["Skill"],key=lambda x:x.str.len())
10.按行值對數據框進行排序
我們還可以按特定的行值對數據框進行排序。
創建一個包含數字的數據框。
df = pd.DataFrame(data={'x':[10,30,20], 'y':[1,2,3],'z':[5,15,10]})
df
我們可以根據特定行中的值對數據框進行排序。讓我們進行排序row 0 默認情況下,它將按升序對行中的值進行排序。
df.sort_values(by=0,axis=1)
by=0 表示第0行。
axis=1 指示要排序的列。
如果要排序的行包含不同的數據類型,它將提高TypeError。
df1 = pd.DataFrame(data={'x':[10,10,"d"], 'y':['a',5,'c'],'z':[5,15,'a']})
df1
如果我們按row0對數據幀進行排序,它將提高TypeError。row 0包含字符串和整數。
df1.sort_values(by=0,axis=1)
Output:
TypeError: ‘<’ not supported between instances of ‘str’ and ‘int’
但是我們可以基於row1和row2對數據幀df1進行排序。int第1行str僅包含,第2行僅包含。
df1.sort_values(by=2,axis=1)
Pandas.DataFrame.sort_index
DataFrame.sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, ignore_index=False, key=None)
按標簽(沿軸)對對象排序。
如果inplace參數為False,則返回按標簽排序的新DataFrame ,否則更新原始DataFrame並返回None。
1.按行索引對數據框進行排序
創建一個數據框。
df=pd.read_csv("C:\pandas_experiment\pandas_sorting\data2.csv") df
將EmpID列設置為行索引。
df.set_index('EmpID',inplace=True)
我們可以按行索引和列索引對數據進行排序。
df.sort_index() or df.sort_index(axis=0)
兩者是相同的。axis=0表示按行索引排序。
默認情況下,它將以升序排序。
2.按列索引對數據框進行排序
通過提及按列索引對數據框進行排序axis=1。
df.sort_index(axis=1)
默認情況下,它將按升序排序。
3.排序具有多索引的數據框
創建一個數據框並將兩列設置為row_index。
df=pd.read_csv("C:\pandas_experiment\pandas_sorting\data2.csv") df.set_index(["EmpID","Age"],inplace=True)
現在,我們可以按row_index EmpID和Age對數據框進行排序。
如果level=0給出,它將基於row_index排序“EmpID”
df.sort_index(level=0)

如果level=1表示將根據row_index對數據框進行排序“Age”
默認情況下,sort_remaining=True表示如果按級別和索引排序是多級的,則在按指定級別排序后也按其他級別(按順序)排序。
在此示例中,它將按級別1(“Age”)進行排序,如果值的均值相同,則它將按另一個索引(“EmpID”)進行排序
df.sort_index(level=1)
4.僅將具有多索引的數據框按一級排序
通過提及一級和sort_remaining=False,我們只能將具有多索引的數據框排序為一級。
df.sort_index(level="Age",sort_remaining=False)
在此示例中,EmpID索引未排序。數據框僅基於“Age” 索引排序。
5.按索引降序對數據框排序
如果我們提到ascending=False,它將根據提到的索引以降序對數據幀進行排序。
df.sort_index(axis=0,ascending=False)
結論:
- 如果對pandas數據框進行排序,則返回帶有排序值的數據
inplace=False框。否則,如果inplace=True返回None,它將修改原始數據框本身。 - 默認情況下,所有排序僅按升序進行。如果我們提到的話,
ascending=False它將以降序排列。
