KeyError в группе DataFrame - PullRequest
       0

KeyError в группе DataFrame

0 голосов
/ 11 февраля 2019

Я видел несколько похожих ответов относительно KeyErrors от использования groupby в DataFrame.Однако их решения и объяснения не соответствуют моей проблеме должным образом.

Я нахожу это особенно странным, потому что не могу воспроизвести исключение при тестировании сценария в консоли Python, подавая его с помощью кодапострочно.Групповая попытка работает нормально при тестировании с примерами из одной записи.

Кроме того, я ранее использовал тот же сценарий для json-файла аналогичного формата, хотя и со значительно меньшим размером данных - и он работал без проблем .

Чтоя пытаюсь это сделать?

У меня есть вложенная строка json, которую я пытаюсь отформатировать с использованием DataFrame, подсчитать, сколько раз конкретное значение появляется в каждом столбце.

JSON, когда он проходит через конвертер, выглядит так:

action,timestamp,campaign_id,title,type,url
open,2019-02-08T08:57:59+00:00,192a39071b,[CAMPAIGN TITLE],,
sent,2019-02-08T07:00:00+00:00,192a39071b,[CAMPAIGN TITLE],regular,
sent,2019-02-07T11:00:00+00:00,2159592071,[CAMPAIGN TITLE],regular,
open,2019-02-07T08:33:44+00:00,214d84380b,[CAMPAIGN TITLE],,
open,2019-02-07T08:33:19+00:00,56ab3a5934,[CAMPAIGN TITLE],,
open,2019-02-07T08:32:33+00:00,811ac6cae3,[CAMPAIGN TITLE],,
sent,2019-02-07T02:45:00+00:00,214d84380b,[CAMPAIGN TITLE],regular,
sent,2019-02-05T02:30:00+00:00,56ab3a5934,[CAMPAIGN TITLE],regular,

(в случае, если это уместно - JSON извлекается непосредственно из API и не записывается в CSV или что-либо еще)

В частности, я хочу подсчитать, сколько раз слова "open" и "sent" появляются под столбцом для "action".

Это соответствующий фрагмент кода, который я использовал:

dretrieved = json.loads(response.text)

dframed = pandas.DataFrame(dretrieved['activity'])

actionssummary = dframed.groupby('action').size()

try: opencount = actionssummary['open']
except:
    opencount = 0

try: sentcount = actionssummary['sent']
except:
    sentcount = 0

И это был след:

Traceback (most recent call last):
  File "MC_member_data_list_api.py", line 92, in <module>
    actionssummary = dframed.groupby('action').size()
  File "C:\Users\username\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\core\generic.py", line 7622, in groupby
    observed=observed, **kwargs)
  File "C:\Users\username\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\core\groupby\groupby.py", line 2110, in groupby
    return klass(obj, by, **kwds)
  File "C:\Users\username\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\core\groupby\groupby.py", line 360, in __init__
    mutated=self.mutated)
  File "C:\Users\username\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\core\groupby\grouper.py", line 578, in _get_grouper
    raise KeyError(gpr)
KeyError: 'action'

Кто-нибудь знает, что происходит?

РЕДАКТИРОВАТЬ : Следуя комментарию suvayu о гейзенгах, вызванном неожиданным или искаженным вводом, я добавил в свой код исключительный проход, как показано ниже, чтобы он записывал ноль (0) для этогозапись пользователя и перейти к следующему:

    dframed = pandas.DataFrame(dretrieved['activity'])
    # identify action portion of the json (go to next if error)
    try: actionssummary = dframed.groupby('action').size()
    except:
        pass



    # identify count of opens
    try: opencount = actionssummary['open']
    except:
        opencount = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...