即使列存在,也会发生 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的主要内容,如果未能解决你的问题,请参考以下文章

即使满足条件并且即使目标表和源表中的字段已经存在,雪花合并也会添加数据

即使使用事务回滚,SQL标识(自动编号)也会增加

即使光标关闭,Psycopg 请求也会挂起

即使手机放在桌子上,位置也会发生变化

即使空间增加,Errno::ENOSPC 也会继续发生

即使在两者之间发生错误,休眠也会自动更新我的实体