【问题标题】:Pandas sort_values does not sort numbers correctlyPandas sort_values 无法正确排序数字
【发布时间】:2018-06-03 12:00:05
【问题描述】:

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

这是我使用的代码:

league_dataframe.sort_values('overall_league_position')

排序方法在“总联赛排名”列中产生的值未按该方法默认的升序或顺序排序。

我做错了什么?感谢您的耐心等待!

【问题讨论】:

  • 请将您的代码直接粘贴到问题中,而不是图像。您可以使用 {} 按钮对其进行正确格式化。您也应该为输出执行此操作。
  • 这是一列字符串,这就是原因。

标签: python pandas sorting dataframe


【解决方案1】:

无论出于何种原因,您似乎正在处理一列字符串,而sort_values 正在返回一个 lexsorted 结果。

这是一个例子。

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

补救方法是将其转换为数字,使用.astypepd.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

b/w astypepd.to_numeric 的唯一区别在于后者在处理非数字字符串时更加健壮(它们被强制转换为 NaN),并且如果强制转换为浮动不是必需的(如本例所示)。

【讨论】:

  • 如果我需要实际处理字符串值并保持原样怎么办?例如字符串“1%”、“2%”、“10%”、“25%”、...?有没有一种方法可以通过自定义比较器对值进行排序,而无需来回转换数据?
  • @AdamBajger 可以在线查找“熊猫自然排序栏”。
  • @cs95 我刚刚找到了一个全面的答案here,尽管如此,感谢您的 natsorted。
  • @AdamBajger 哦,太棒了,我想我知道拥有这个答案的小伙子......
  • 拯救了我的一天,伙计! .astype(float) 起作用了。
猜你喜欢
  • 2020-04-30
  • 2012-12-31
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
相关资源
最近更新 更多