Неожиданный Python KeyError - PullRequest
       16

Неожиданный Python KeyError

1 голос
/ 03 ноября 2019

Я загрузил файл CSV в кадр данных Pandas:

import pandas as pd

Name     ID    Sex     M_Status    DaysOff
Joe      3      M         S           1
NaN     NaN    NaN       NaN          2
NaN     NaN    NaN       NaN          3

df = pd.read_csv('People.csv')

Затем эти данные будут загружены в файл HTML.

test = """

      HTML code

 """

Теперь для подготовки данных для HTMLfile:

df1 = df.filter(['Name','ID','Sex','M_Status','DaysOff'])

file = ""

for i, rows in df1.iterrows():

   name = (df1['Name'][i])
   id = (df1['ID'][i])
   sex = (df1['Sex'][i])
   m_status = (df1['M_Status'][i])
   days_off = (df1['DaysOff'][i])

   with open(f"personInfo{i}.html", "w") as file:
      file.write(test.format(name,id,sex,m_status,days_off))
      file.close()

И ошибка:

KeyError: 'days_off'

Примечание: эта ошибка возникает в цикле for.

Может кто-нибудь увидеть, где я иду неправильно? Эта ошибка генерируется, когда вы пытаетесь получить данные из столбца, который не соответствует имени, или если столбец не имеет такого заголовка. Однако это так.

Информация об ошибке:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in 
get_loc(self, key, method, tolerance)
2656             try:
-> 2657                 return self._engine.get_loc(key)
2658             except KeyError:

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in 
pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in 
pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 'days_off'

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
<ipython-input-16-35e6b916521b> in <module>
      1     name = (df1['Name'][i])
      2     id =  (df1['ID'][i])
      3     sex = (df1['Sex'][i])
      4     m_status = (df1['M_Status'][i])
----> 5     days_off = (df1['DaysOff'][i])    

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py in 
__getitem__(self, key)
   2925             if self.columns.nlevels > 1:
   2926                 return self._getitem_multilevel(key)
-> 2927             indexer = self.columns.get_loc(key)
   2928             if is_integer(indexer):
   2929                 indexer = [indexer]

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in 
get_loc(self, key, method, tolerance)
   2657                 return self._engine.get_loc(key)
   2658             except KeyError:
-> 2659                 return 
self._engine.get_loc(self._maybe_cast_indexer(key))
   2660         indexer = self.get_indexer([key], method=method, 
tolerance=tolerance)
   2661         if indexer.ndim > 1 or indexer.size > 1:

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in 
pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in 
pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 'days_off'

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Просто догадка, но ваше сообщение об ошибке говорит о том, что вы пытаетесь получить доступ к столбцу данных с помощью ключа days_off, когда он должен быть DaysOff. В указанном вами коде я не вижу места, где это происходит, но я бы дважды проверил ваш файл исходного кода, чтобы убедиться, что вы используете правильное имя ключа.

0 голосов
/ 04 ноября 2019

Я решил это и какая это глупая ошибка!

В основном в конце имени заголовка был пробел.

То, что хотел / ожидал Python:

days_off = (df1['DaysOff '][i])

, тогда как я давал его:

days_off = (df1['DaysOff'][i])

Очень глупая человеческая ошибка. Благодаря всему, что посмотрел на это, хотя

...