【问题标题】:convert multiple json objects to pandas dataframe将多个 json 对象转换为 pandas 数据框
【发布时间】:2015-05-16 11:31:30
【问题描述】:

我是 python 新手,遇到一些概念上非常简单的问题。我已经阅读了许多 SO 帖子,但仍然无法解决我的问题。

我有一个功能可以将亚马逊评论转换为 json 格式。每条评论都成为一个 json 对象。我想在单个数据框中编译所有评论,将 json 键作为列,每条评论连续。

有大量评论,每条评论格式如下:

{
"product/productId": "B00006HAXW",
"product/title": "Winnie the Pooh",
"product/price": "unknown",
"review/userId": "A1RSDE90N6RSZF",
"review/profileName": "piglet",
"review/helpfulness": "9/9",
"review/score": "5.0",
"review/time": "1042502400",
"review/summary": "Love this book", 
"review/text" : "Exciting stories about highly intelligent creatures, very inspiring!"
}

如何将所有评论编译成 pandas 数据框?我有两个不同的问题:

  1. 如何将所有评论汇总到一个对象中?目前,输出是这样生成的:

    for e in parse("reviews.txt.gz"):
        print json.dumps(e)
    

我尝试创建一个空的list 并使用append

    for e in parse("reviews.txt.gz"):
        revs = []
        revs = revs.append(json.dumps(e))

但这不起作用 - print revs 打印出来

None
None
None 
  1. 当我对上述格式的单个评论使用pd.read_json 时,它返回“如果使用所有标量值,则必须传递一个索引”。这是否意味着我没有有效的 json 格式数据?

【问题讨论】:

  • 看起来您正在为每个循环使用revs = [] 重新初始化一个空列表,然后将revs 重新分配给list.append 调用的输出(即Nonelist.append 修改了原来的list)。此外,您可能不需要 json.dumps(e) 调用,您需要一个 python 对象列表而不是 json 对象。
  • parse("reviews.txt.gz") 工作吗?这就是您发布的示例 json 的原因吗?
  • @cphlewis 是的,示例 json 格式的评论是由 parse("file") 生成的。
  • @jeff 当然,必须在循环外初始化列表。谢谢。

标签: python json pandas


【解决方案1】:
  1. 无需对数据调用json.dumps(),因为这会返回一个字符串,您可以将 python 对象传递给 Pandas。

你的 for 循环应该看起来像

revs = []
for e in parse("reviews.txt.gz"):
    revs = revs.append(e)

但除非 parse 是一个生成器(即使用 yield 关键字),否则您可以只设置 revs = parse("reviews.txt.gz")

  1. pd.read_json 尝试将 json 解析为 DataFrame...如果您只有一列,这将引发错误,因为它期望数据被双重索引。

所以如果revs 现在是一个字符串列表(即,您的解析函数返回数据的 json 表示形式),您可以调用

df = pd.read_json(revs)

否则,如果 revs 现在是一个字典列表(即,您的解析函数已经解释了 json 并返回数据的字典),您可以调用

df = pd.DataFrame(revs)

【讨论】:

  • 谢谢@Alex! Parse 是一个生成器。删除对 j​​son.dumps 的调用并在循环外初始化 revs 解决了问题 1。由于生成了字典列表,调用 pd.DataFrame 解决了问题 2。
猜你喜欢
  • 2018-10-27
  • 2014-04-15
  • 2021-12-21
  • 2022-01-21
  • 2019-05-14
  • 2020-07-11
  • 2019-07-01
  • 2021-12-13
  • 2020-03-27
相关资源
最近更新 更多