【问题标题】:KeyError occurs even though column exists即使列存在,也会发生 KeyError
【发布时间】:2020-07-27 00:05:47
【问题描述】:

我知道这个问题在这里问了很多,但我一直在查看其他问题,但我没有找到任何使用 .csv 文件的问题。

这是我的 csv 文件:

Survived, Pclass, Sex, Age, Siblings, Parents, Fare  
0, 3, male, 22.0, 1, 0, 7.25  
1, 1, female, 38.0, 1, 0, 71.2833  
1,3,female, 26.0, 0, 0, 7.925  
1, 1, female, 35.0, 1, 0, 53.1

还有我的代码:

import pandas as pd  
df = pd.read_csv("titanic.csv")  
print(df)  
print(df.columns)  
print(df["Pclass"])

我的代码的第 3 行和第 4 行运行良好,因此第二行或 csv 文件本身可能没有问题,对吧?第 5 行是出错的地方。这是错误消息:

奇怪的是,当我尝试使用文件中的第一个标题“Survived”执行第 5 行时,它起作用了。只有其他标题才会发生此错误。 如果有帮助,我正在使用 Python 3.7.1 版和 pandas 1.0.3 版。

【问题讨论】:

  • 您的列名前有一个空格....print(df[" Pclass"])
  • 在您的问题中包含print(df.columns) 的输出。您可能会看到一些需要修剪的额外空白。
  • 非常感谢,我想它现在已经修复了!这是一个非常简单的解决方案。

标签: python pandas csv indexing keyerror


【解决方案1】:

read_csv 中的默认分隔符是逗号 (,)。您的 CSV 文件使用逗号和空格 (,)。您需要明确指定此分隔符:

df = pd.read_csv("titanic.csv", sep=', ')  

【讨论】:

    【解决方案2】:

    这是因为您的列名旁边有空格。您的专栏不是Pclass,而是Pclass

    检查一下:

    print(df[" Pclass"])
    

    如果您想从空格中去除列名,您可以这样做。

    df.rename(columns = {c: c.strip() for c in df.columns}, inplace = True)
    

    【讨论】:

      【解决方案3】:

      strip() 您的列的另一种方法如下所示,以便删除空格。

      print(df)  
      print(df.columns)  
      df.rename(columns=lambda x: x.strip(),inplace=True)
      print(df["Pclass"])
      

      【讨论】:

        猜你喜欢
        • 2014-04-30
        • 2010-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多