熊猫sort_value排序不正确

时间:2020-08-06 13:38:51

标签: python pandas

尝试对0到100的数字列排序时遇到问题。

df_score = df.sort_values('score', ascending = False)

原始数据框为df: original df

和排序的df: sorted df

已排序的数据帧已正确排序,但最后两行均为100。它们应该在前两个条目中。

我该如何解决?谢谢

编辑:该列不是数字形式,这导致了错误。谢谢!

2 个答案:

答案 0 :(得分:1)

正如其他人评论的那样,您的分数数据似乎是str而不是数字。这将导致它们在某种程度上按字母顺序而不是按值排序。这是一个示例:

import pandas as pd

nums = [2, 10, 5, 3, 1]
strs = [str(i) for i in nums]

df_num = pd.DataFrame(nums, columns = ['score'])
df_str = pd.DataFrame(strs, columns = ['score'])

这两个“看起来都像这样”:

   score
0      2
1     10
2      5
3      3
4      1

但是只有数字之一可以按照您的期望进行排序:

df_num.sort_values('score', ascending = False)

Out[13]: 
   score
1     10
2      5
3      3
0      2
4      1
df_str.sort_values('score', ascending=False)

Out[15]: 
  score
2     5
3     3
0     2
1    10
4     1

正如ALollz所说,您可以将其转换为数字以进行修正:

df_str['score'] = pd.to_numeric(df_str['score']) #now the sort works

答案 1 :(得分:0)

您可能会传递STRING而不是INT。

在这种情况下,请检查对原始问题的评论,其中另一位用户提供了以下解决方案,可以轻松地将这些值转换为Integers:

df_str['score'] = pd.to_numeric(df_str['score'])

然后

df_score = df.sort_values('score', ascending = False)


假设您打算使用字符串: 在不同语言的许多不同情况下,排序可能很有趣。这里发生的是排序功能正在将2位分数计算为3位分数之前的排序。例如,如果您的得分如下:

  • 98
  • 999
  • 97
  • 1000
  • 120
  • 998
  • 4
  • 9

您的排序输出可能看起来像这样:

  • 9
  • 4
  • 98
  • 97
  • 999
  • 998
  • 120
  • 1000

您可以选中the documentation for sort_values