即使列存在,也会发生 KeyError
Posted
技术标签:
【中文标题】即使列存在,也会发生 KeyError【英文标题】:KeyError occurs even though column exists 【发布时间】: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)
的输出。您可能会看到一些需要修剪的额外空白。
非常感谢,我想它现在已经修复了!这是一个非常简单的解决方案。
【参考方案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"])
【讨论】:
以上是关于即使列存在,也会发生 KeyError的主要内容,如果未能解决你的问题,请参考以下文章