【问题标题】:Divide dictionaries from API-data into separate columns将 API 数据中的字典划分为单独的列
【发布时间】:2021-12-28 12:04:35
【问题描述】:

从一开始,我就需要指出显而易见的事情:我或多或少是一个完整的初学者,非常感谢非常具体、详细的建议和指导。

我使用以下方法从 Canvas API 中提取了数据:

result = requests.get('https://canvas.gu.se/api/v1/courses/xxxxx/assignments/xxxxxx/submissions', params={"include": ["submission_history", "submission_comments"]}, headers={'Authorization': 'Bearer ' + canvas_token})

数据被格式化为 json 并在 Jupyter Notebook 中使用 pandas 进行处理。指定要包含的数据最终在一个列中,但是应该有一种方法可以将这些字典及其明显不同的内容解压缩到单独的列中。现在看起来像这样:

[{'id': xxxxxx, 'comment': 'Text text text text', 'author_id': 219949, 'author_name': 'Name Name', 'created_at': '2021-11-09T12:13:26Z', 'edited_at': None, 'avatar_path': '/images/users/xxxxxx-xxxxxxxx', 'author': {'id': xxxxxx, 'display_name': 'Name Name', 'avatar_image_url': 'https://canvas.gu.se/images/messages/avatar-50.png', 'html_url': 'https://canvas.gu.se/courses/xxxxx/users/xxxxxx', 'pronouns': None}}, {'id': xxxxxx, 'comment': 'Other text text text text', 'author_id': xxxxxx, 'author_name': 'Name Name', 'created_at': '2021-11-09T12:13:40Z', 'edited_at': None, 'avatar_path': '/images/users/xxxxxx-xxxxxxxx', 'author': {'id': xxxxxx, 'display_name': 'Name Name', 'avatar_image_url': 'https://canvas.gu.se/images/messages/avatar-50.png', 'html_url': 'https://canvas.gu.se/courses/xxxxx/users/xxxxxx', 'pronouns': None}}]

我想要的是分别有 cmets 以便于阅读。我查看了 json_normalize,但无法让它工作。

附带说明:检索到的数据应该包含来自超过 200 名学生的数据,但我只得到 10 名。知道我可能做错了什么吗?

【问题讨论】:

  • 您想要所有 cmets 的列表?
  • 您在上面看到的是在“submission_cmets”列的一个单元格中找到的内容。我希望将数据分成不同的列,而实际的 cmets,这里用“Text text text text”匿名,是我感兴趣的信息。

标签: python json pandas


【解决方案1】:

看起来您有一个dicts 列表列表。要分别获取所有 cmets,只需遍历列表并使用以下命令提取 cmets:

for my_list in df['submission_comments']:
    for d in my_list:
        x = d.get('comment', "")

然后每个评论的值将在 x 中,您可以对它做任何您想做的事情,也许将它放在所有 cmets 的列表或字典中。 (注意:如果d['comment'] 不存在,d.get('comment', "") 将返回一个空字符串。

【讨论】:

  • 这是我尝试这个时得到的结果:AttributeError Traceback (最近一次调用最后一次) in 1 my_list = df["submission_cmets"] 2 for d in my_list: ----> 3 x = d.get('comment', "") AttributeError: 'list' object has no attribute 'get'
  • 请包含您的代码的 sn-p,以便我更好地了解您要做什么。
  • ´my_list = df["submission_cmets"] for d in my_list: x = d.get('comment', "")´ 我想我不能将 pandas 与普通 Python 代码结合起来,但是我不知道如何列出在 DataFrame 中找到的内容以通过另一种方式进行迭代。
  • 我已根据您提供的信息更新了我的答案...
猜你喜欢
  • 2019-04-03
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 2022-08-19
  • 2020-02-08
  • 2020-03-21
  • 2021-05-21
  • 1970-01-01
相关资源
最近更新 更多