DataFrame中的KeyError分组依据

时间:2019-02-11 12:33:01

标签: python python-3.x pandas dataframe

我已经在DataFrame中使用groupby看到了一些有关KeyError的类似答案。但是,他们的解决方案和解释与我的问题不符。

我发现这特别奇怪,因为在Python控制台中测试脚本时,无法通过逐行输入代码来复制该异常。在通过一个示例进行测试时,groupby尝试可以正常工作。

另外,我之前版本曾将相同的脚本用于格式相似的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或其他任何形式编写的)

具体来说,我想计算“打开”和“已发送”出现在“操作”列下的次数。

这是我使用的代码的相关代码段:

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对由意外或格式错误的输入引起的Heisenbug进行评论之后,我在代码中添加了一个Exception-pass,如下所示,以便该用户输入的内容记录为零(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

0 个答案:

没有答案