尝试对0到100的数字列排序时遇到问题。
df_score = df.sort_values('score', ascending = False)
原始数据框为df: original df
和排序的df: sorted df
已排序的数据帧已正确排序,但最后两行均为100。它们应该在前两个条目中。
我该如何解决?谢谢
编辑:该列不是数字形式,这导致了错误。谢谢!
答案 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位分数之前的排序。例如,如果您的得分如下:
您的排序输出可能看起来像这样: