#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
.