Python 熊猫排序\u值排序不正确

Python 熊猫排序\u值排序不正确,python,pandas,Python,Pandas,我在尝试对0-100 desc中的数字列进行排序时遇到问题 df_score = df.sort_values('score', ascending = False) 原始数据帧为df: 和已排序的df: 已排序的数据帧已正确排序,但最后两行除外,这两行都是100。它们应该位于前两个条目中 我如何解决这个问题?谢谢 编辑:列不是数字形式,这导致了错误。谢谢 正如其他人所评论的,您的分数数据似乎是str而不是数字。这将导致它们按字母顺序排序,而不是按值排序。下面是一个例子: import p

我在尝试对0-100 desc中的数字列进行排序时遇到问题

df_score = df.sort_values('score', ascending = False)
原始数据帧为df:

和已排序的df:

已排序的数据帧已正确排序,但最后两行除外,这两行都是100。它们应该位于前两个条目中

我如何解决这个问题?谢谢


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

正如其他人所评论的,您的分数数据似乎是
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'])
这两个“看起来”都是这样的:

但只有数字的排序与您期望的一样:

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

Out[13]: 
   score
1     10
2      5
3      3
0      2
4      1
正如ALollz所说,您可以将其转换为数字以修复:

df_str['score'] = pd.to_numeric(df_str['score']) #now the sort works
您可能传递的是字符串而不是整数。

在这种情况下,请查看原始问题的注释,其中另一个用户提供了以下解决方案,以方便地将这些值转换为整数:

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

然后

df\u score=df.sort\u值('score',升序=False)


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

  • 98
  • 999
  • 97
  • 一千
  • 120
  • 998
  • 四,
  • 九,
您的排序输出可能如下所示:

   score
0      2
1     10
2      5
3      3
4      1
  • 九,
  • 四,
  • 98
  • 97
  • 999
  • 998
  • 120
  • 一千

您可以检查。

看起来您的分数是按字符串而不是数字排序的。在排序之前,请使用
df['score']=pd转换为数字。转换为数字(df['score'])
以解决@JustinEzequiel raisedAh的问题,这很有意义,只是现在就做了,并且成功了。谢谢这是对这两个答案的更好解释,涵盖了所有可能的问题。这应该是公认的答案。
df_str['score'] = pd.to_numeric(df_str['score']) #now the sort works