Ошибка ключа панд при поиске ключевого слова в «ячейке» - PullRequest
1 голос
/ 13 апреля 2019

Я перебираю некоторые данные в кадре данных pandas в поисках конкретных ключевых слов, однако в результате поиска по регулярному выражению в KeyError: 19.

Я пытался извлечь данные в определенной ячейке,поместите его в строковый объект и выполните поиск по нему, но каждый раз, когда я пытаюсь указать что-либо, чтобы посмотреть данные в этом столбце, я получаю KeyError: 19.

В предисловии к моему примеру кода я вытащилВыделить отдельные фрагменты данных и поместить их в список списков.(Из этих кусков я сохранил все столбцы, которые были в исходном кадре данных)

Вот пример итерации, которую я пытаюсь выполнить:

for eachGroup in mainList:
   for lineItem in eachGroup:
      if re.search(r'( keyword )', lineItem[19], re.I):
         dostuff

Как вы уже догадалисьданные, в которых я ищу ключевые слова, - это столбец 19, данные которого отформатированы следующим образом:

 3/23/2019 11:32:0 3/23/2019 11:32:0 3/23/2019 14:3:0 CSG CHG H6   27   1464D  Random Random Random  81

Каждая вторая попытка поиска ключевых слов в разных столбцах выполняется без каких-либо ошибок.Почему один только этот случай возвращает KeyError?

Для большей ясности, даже следующий код выдает тот же KeyError:

for eachGroup in mainList:
   for lineItem in eachGroup:
      text = lineItem[19]

Ответы [ 2 ]

0 голосов
/ 13 апреля 2019

Вот момент WTF ...

Вместо того, чтобы использовать умный цикл for в python, я решил быть более детализированным и циклическим с циклом while.Само собой разумеется, что это сработало.

Приведенная ниже реализация кода устраняет проблему, хотя почему это не имеет понятия:

bigCount = len(mainList)
count = 0
while count < bigCount:
   while smallCount < len(mainList[count]):
      if re.search(r'( keyword )', mainList[count][smallCount][19], re.I):
         dostuff
0 голосов
/ 13 апреля 2019

Попробуйте изменить re.search(r'( keyword )', lineItem[19], re.I): на re.match('(.*)keyword(.*)', lineItem[19]):. re.search вернет соответствующий соответствующий объект, а re.match вернет логическое значение, которое вам нужно в операторе if. Суффикс и префикс (.*) должен игнорировать любой другой символ слева или справа от строки. Надеюсь, это поможет.

...