KeyError происходит, даже если столбец существует - PullRequest
2 голосов
/ 14 апреля 2020

Мне известно, что этот вопрос часто задают здесь, но я просматривал другие вопросы и не нашел ни одного, который использовал бы файл .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, где это идет не так. Это сообщение об ошибке: This is the error message.

Странно то, что когда я пытаюсь сделать строку 5 с 'Survived', первым заголовком в файле, он работает. Эта ошибка возникает только с другими заголовками. Я использую Python версии 3.7.1 и pandas версии 1.0.3, если это поможет.

Ответы [ 3 ]

2 голосов
/ 14 апреля 2020

Разделителем по умолчанию в read_csv является запятая (,). Ваш CSV-файл использует запятую и пробел (,). Вам необходимо явно указать этот разделитель:

df = pd.read_csv("titanic.csv", sep=', ')  
1 голос
/ 14 апреля 2020

Это потому, что у вас есть пробелы рядом с именами ваших столбцов. Ваш столбец не Pclass, а Pclass.

отметьте это:

print(df[" Pclass"])

, если вы хотите удалить имена столбцов из пробела, вы можете сделать это.

df.rename(columns = {c: c.strip() for c in df.columns}, inplace = True)
1 голос
/ 14 апреля 2020

Еще один способ strip() для ваших столбцов, как показано ниже, чтобы удалить пробелы.

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