Ошибка ключа: 124 при запуске dataframe.loc

#python #pandas #dataframe

#python #панды #dataframe

Вопрос:

При запуске блока кода я обнаружил следующую ошибку:

 KeyError                                  Traceback (most recent call last)
<ipython-input-5-1031c1f0832d> in <module>
     19     TBM_data=pd.read_csv(files, header=0, sep='t')
     20     df_tbm=pd.DataFrame(TBM_data)
---> 21     df_tbmnew=df_tbm.loc[(df_tbm[124]!=0) amp; (df_tbm[140]!=0) amp; (df_tbm[141]!=0),[1,124,140,141]]
     22     df_tbmnew['id']=df_tbmnew.index

~Miniconda3envstensorflowlibsite-packagespandascoreframe.py in __getitem__(self, key)
   2993             if self.columns.nlevels > 1:
   2994                 return self._getitem_multilevel(key)
-> 2995             indexer = self.columns.get_loc(key)
   2996             if is_integer(indexer):
   2997                 indexer = [indexer]

~Miniconda3envstensorflowlibsite-packagespandascoreindexesbase.py in get_loc(self, key, method, tolerance)
   2897                 return self._engine.get_loc(key)
   2898             except KeyError:
-> 2899                 return self._engine.get_loc(self._maybe_cast_indexer(key))
   2900         indexer = self.get_indexer([key], method=method, tolerance=tolerance)
   2901         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: 124
  

Я пытаюсь прочитать несколько .txt файлов внутри цикла for и создать подмножества из этих файлов, используя df.loc в Python. Блок кода:

 files_path=r"E:CSM ResearchJilin data workPre-collapse segments data1. Stakes (70817-70800)"

read_files=glob.glob(os.path.join(files_path,"*.txt"))

for files in read_files:
    x=x 1 
    TBM_data=pd.read_csv(files, header=0, sep='t')
    df_tbm=pd.DataFrame(TBM_data)
    df_tbmnew=df_tbm.loc[(df_tbm[124]!=0) amp; (df_tbm[140]!=0) amp; (df_tbm[141]!=0),[1,124,140,141]]
  

Комментарии:

1. По-видимому, нет столбца с пометкой 124. Чем еще мы можем помочь? Это то, что вам нужно выяснить…

2. Я опустил заголовок из текстовых файлов, поскольку имена столбцов написаны на другом языке. Итак, pandas создал автоматические числа в качестве заголовка столбцов. Итак, есть столбец с заголовком 124, и я использовал те же строки кода вне этого цикла, и этот код сработал. Я не уверен, почему он не работает внутри этого цикла for .

3. команда header=0 гарантирует, что 1-я строка файла .txt будет опущена и будут созданы новые заголовки для столбцов числовых значений. df_tbm[124] указал столбец с заголовком 124, который является сгенерированным числовым заголовком столбца. Пожалуйста, не поймите неправильно мои действия новичка, поскольку я совершенно новичок в программировании на python.

4. Вы делаете это для многих файлов. Возможно ли, что в некоторых из этих файлов нет 124 столбцов?

5. Попробуйте распечатать имя файла прямо перед df_tbmnew этим. ( files в вашем случае используется одно имя файла; вероятно, его следует назвать filename ). Затем посмотрите на последний файл, напечатанный перед ошибкой. Был ли обработан хотя бы один файл?

Ответ №1:

header=0 означает использовать первую строку csv в качестве имен столбцов, если вам нужно pandas автоматически нумеровать имена столбцов, тогда вам нужно передать header=None . Кроме того, поскольку теперь вам, вероятно, нужно пропустить первую строку csv с именами иностранных столбцов, вы также должны передать второй параметр skiprows=1 .