出于某种原因,您似乎正在使用一个字符串列,并且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
解决方法是将其转换为数字,可以使用.astype
或pd.to_numeric
函数。
df.Col = df.Col.astype(float)
或者,
df.Col = pd.to_numeric(df.Col, errors='coerce')
df.sort_values('Col')
Col
0 1
1 2
2 3
3 10
5 19
4 20
astype和pd.to_numeric之间唯一的区别是后者更能够处理非数字字符串(它们被强制转换为NaN),并且会尝试在不需要将整数强制转换为浮点数时保留整数(就像在这种情况下看到的那样)。
.astype(float)
起作用了。 - Davidson Lima