熊猫sort_values无法正确对数字进行排序

New*_*kid 2 python sorting dataframe pandas

我是熊猫的新手,正在编程环境中使用表格数据。我已经按特定的列对数据框进行了排序,但是熊猫吐出来的答案并不完全正确。

这是我使用的代码:

league_dataframe.sort_values('overall_league_position')
Run Code Online (Sandbox Code Playgroud)

排序方法在“总体联赛排名”列中产生值的结果未按升序或顺序进行排序,这是该方法的默认设置。

在此处输入图片说明

我究竟做错了什么?谢谢你的耐心!

cs9*_*s95 8

无论出于何种原因,您似乎都在使用一列字符串,并且sort_values正在向您返回经过分类的结果。

这是一个例子。

df = pd.DataFrame({"Col": ['1', '2', '3', '10', '20', '19']})
df

  Col
0   1
1   2
2   3
3  10
4  20
5  19

df.sort_values('Col')

  Col
0   1
3  10
5  19
1   2
4  20
2   3
Run Code Online (Sandbox Code Playgroud)

补救措施是使用.astype或将其转换为数字pd.to_numeric

df.Col = df.Col.astype(float)
Run Code Online (Sandbox Code Playgroud)

要么,

df.Col = pd.to_numeric(df.Col, errors='coerce')
Run Code Online (Sandbox Code Playgroud)
df.sort_values('Col')

   Col
0    1
1    2
2    3
3   10
5   19
4   20
Run Code Online (Sandbox Code Playgroud)

唯一的区别是b / w astypepd.to_numeric后者在处理非数字字符串方面更为健壮(它们被强制转换为NaN),并且在不需要强制浮点运算的情况下将尝试保留整数(如本例所示) 。

  • 如果我需要实际处理字符串值并保持它们原样怎么办?例如字符串“1%”、“2%”、“10%”、“25%”……?有没有一种方法可以通过自定义比较器对值进行排序,而无需来回转换数据? (2认同)