为何Pandas DataFrame使用sort_values无法正常排序?
解决DataFrame多列排序后Total列混乱的问题
首先排查最常见的核心原因:Total列的数据类型不是数值型。如果Total列是字符串类型(比如读取CSV时附带了货币符号、逗号等非数值字符),排序时会按字符顺序而非数值大小排列,自然会出现看起来混乱的结果。
步骤1:检查Total列的数据类型
先运行以下代码确认列类型:
print(officeSuppliesDf['Total'].dtype)
如果输出是object,说明该列是字符串类型,需要进行转换。
步骤2:转换Total列为数值类型
如果Total列包含$、逗号这类非数值字符,先清理再转换:
import pandas as pd # 移除非数值字符,转换为数值类型,无法转换的内容设为NaN officeSuppliesDf['Total'] = pd.to_numeric( officeSuppliesDf['Total'].replace(r'[\$,]', '', regex=True), errors='coerce' )
步骤3:重新执行排序
转换完成后再运行排序代码,也可以先不使用inplace参数验证结果:
sorted_df = officeSuppliesDf.sort_values( by=['Region', 'Total'], ascending=[True, False] ) print(sorted_df)
其他排查点
- 如果Total列存在
NaN值,默认会排在对应Region组的末尾,可通过na_position参数调整位置(比如na_position='first'让NaN排在组内最前面)。 - 确认查看的是完整排序结果:多列排序规则是先按Region升序分组,仅在同一Region组内按Total降序排列,不同Region之间的Total无需保持整体降序。
内容的提问来源于stack exchange,提问作者Amitai Rodrigues Garcia
相关产品推荐
相关产品推荐

