KeyException в Python Pandas - PullRequest
       12

KeyException в Python Pandas

0 голосов
/ 18 мая 2018

Я получаю следующую ошибку, связанную с ошибкой ключа.У меня большой набор данных (в области 10 миллионов записей), и я пытаюсь отфильтровать только те записи, которые содержат ключевое слово в поле «теги».Я могу легко сравнивать ключевые слова, но анализ включения ключевых слов кажется довольно сложным, и любой из методов, которые я пробовал найти в SO, выдает ошибку.Я новичок в Пандах, поэтому, пожалуйста, прости меня, если я совершаю смертный грех.(Взял BigData в университете, и мы работали в основном в Spark. Я понимаю, что код сейчас немного хакерский, просто пытаюсь заставить его работать)

Примечания: 1 Данные хранятся в ежеквартальных файлах, поэтому я перебираю файлы и объединяю результаты (что является причиной для индекса и счетчика) 2 Я закомментировал строки, которые позволяют мне анализироватьдля точных совпадений (#is_goodwill = data_frame['tag'] == word_of_interest && #good_will_relation = data_frame[is_goodwill])

Цель: фильтр для записей, содержащих ключевое слово word_of_interest Точное совпадение с ключом не обязательнослово, а точнее содержат ключевое слово.Код под ошибкой

Ошибка

Traceback (most recent call last):
  File "C:\Users\tyler\Anaconda3\lib\site-packages\pandas\core\indexes\base.py", line 2525, in get_loc
    return self._engine.get_loc(key)
  File "pandas/_libs/index.pyx", line 117, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 139, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 1265, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 1273, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'tags'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "parsePandasSECData.py", line 64, in <module>
    main()
  File "parsePandasSECData.py", line 42, in main
    good_will_relation = data_frame[data_frame['tags'].str.contains(word_of_interest)]
  File "C:\Users\tyler\Anaconda3\lib\site-packages\pandas\core\frame.py", line 2139, in __getitem__
    return self._getitem_column(key)
  File "C:\Users\tyler\Anaconda3\lib\site-packages\pandas\core\frame.py", line 2146, in _getitem_column
    return self._get_item_cache(key)
  File "C:\Users\tyler\Anaconda3\lib\site-packages\pandas\core\generic.py", line 1842, in _get_item_cache
    values = self._data.get(item)
  File "C:\Users\tyler\Anaconda3\lib\site-packages\pandas\core\internals.py", line 3843, in get
    loc = self.items.get_loc(item)
  File "C:\Users\tyler\Anaconda3\lib\site-packages\pandas\core\indexes\base.py", line 2527, in get_loc
    return self._engine.get_loc(self._maybe_cast_indexer(key))
  File "pandas/_libs/index.pyx", line 117, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 139, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 1265, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 1273, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'tags'

Код

import pandas as pd
import os.path
import time
import csv

def main():

    start_time = time.time()

    file_path = "C:/Users/TA/Desktop/Data/"
    word_of_interest = "ShareholdersEquity"
    NUM_FILE_NAME = "number.csv"
    SUB_FILE_NAME = "subnumber.csv"
    quarterly_list = ['Q1', 'Q2', 'Q3', 'Q4']
    all_concat_data = None

    pd.set_option('display.max_row', 1000)

    for counter in range(9,19):
        for index in range(len(quarterly_list)):

            #iterates over all file locations
            num_file_path = file_path + quarterly_list[index] + str(counter) + '/' + NUM_FILE_NAME
            sub_file_path = file_path + quarterly_list[index] + str(counter) + '/' + SUB_FILE_NAME

            if os.path.exists(num_file_path) and os.path.exists(sub_file_path):   
                print('Starting ' + quarterly_list[index] + str(counter) + ' Data')

                #Load data
                data_frame = pd.read_csv(num_file_path, dtype={'adsh': str, 'tag': str, 'version coreg': str, 'ddate': int, 'qtrs': int, 'uom': str, 'value': float, 'footnote': str}, \
                header=0, delimiter='\t', low_memory= False, encoding= 'ISO-8859-1')

                #Comparative Data 
                transaction_descriptions = pd.read_csv(sub_file_path, dtype={'adsh': str}, header = 0, delimiter = '\t', low_memory=False, encoding='ISO-8859-1')

                #is_goodwill = data_frame['tag'] == word_of_interest

                #good_will_relation = data_frame[is_goodwill]

                good_will_relation = data_frame[data_frame['tags'].str.contains(word_of_interest)]

                captured_data = good_will_relation.merge(transaction_descriptions,  how='inner', left_on='adsh', right_on='adsh')

                if all_concat_data is not None:
                    all_concat_data = pd.concat([all_concat_data,captured_data])

                else:
                    all_concat_data = captured_data

            else:
                print(quarterly_list[index] + str(counter) + ' Does not exist...Skipping')

    print('Starting Writer operation')

    writer = pd.ExcelWriter('output.xlsx')

    all_concat_data.to_excel(writer, 'Sheet1')

    print("--- %s seconds ---" % (time.time() - start_time))

if __name__ == "__main__":
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...