You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas按值降序排序DataFrame时sort_values报KeyError问题处理

问题根因

之所以报KeyError: 'Freq1',本质是pd.read_csv的默认参数和你的CSV文件格式不匹配,根本没有正确拆分出独立的Freq1列:

  • 你的CSV是用分号分隔不同字段的,但pandas读文件默认用逗号当分隔符。读取时不会拆分分号连接的内容,第一行的Letter;Freq1会被当成一整个列的列名,后面每一行的A;0.0817这类内容也会被整段存进这唯一的列里,自然找不到叫Freq1的独立列。
  • 从你贴的输出能看到表头行前面还有多余空格,就算分隔符设对了,带空格的列名也没法和你代码里写的Freq1精准匹配。
正确实现代码

读取时显式指定匹配你文件的参数,读入后再执行排序:

import pandas as pd

dataset = pd.read_csv(
    "Kripto.csv",
    sep=";",  # 显式指定分号为字段分隔符
    skipinitialspace=True  # 自动清理列名、字段值前后的多余空格
)

# 此时打印dataset.columns,可以看到实际列名是['Letter', 'Freq1'],可以正常匹配
sorted_dataset = dataset.sort_values(by="Freq1", ascending=False)

# 注意后续取数组要基于排序后的数据集,不然拿到的还是未排序的原始数据
x = sorted_dataset.iloc[:, :].values
避坑提醒
  • 如果读取后发现自动识别的列名不符合预期,可以直接手动给数据集的列赋值命名,不需要依赖read_csv的自动表头识别:
    dataset.columns = ['Letter', 'Freq1']
    
  • 不要把变量命名为sorted,这是Python内置的排序函数名,直接覆盖会引发后续代码的隐性bug,建议用sorted_dataset这类语义化名称替代。
  • 遇到列名匹配类的KeyError,优先打印dataset.columns查看实际存在的列名,比靠猜列名效率高很多。

内容的提问来源于stack exchange,提问作者Umut K.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 05:24:10