排序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_experimentpandas_sortingdata1.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_experimentpandas_sortingdata2.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_experimentpandas_sortingdata2.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
它将以降序排列。