Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将多个json对象转换为数据帧_Python_Json_Pandas - Fatal编程技术网

Python 将多个json对象转换为数据帧

Python 将多个json对象转换为数据帧,python,json,pandas,Python,Json,Pandas,我是python新手,在一些概念上似乎非常简单的问题上遇到了麻烦。我已经读了很多这样的帖子,但仍然不能解决我的问题 我有一个将amazon评论转换为json格式的函数。每次审阅都成为一个json对象。我希望在一个数据框架中编译所有评论,json键作为列,每个评论排成一行 有大量的评论,每个评论的格式如下: { "product/productId": "B00006HAXW", "product/title": "Winnie the Pooh", "product/price": "unkno

我是python新手,在一些概念上似乎非常简单的问题上遇到了麻烦。我已经读了很多这样的帖子,但仍然不能解决我的问题

我有一个将amazon评论转换为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!"
}
for e in parse("reviews.txt.gz"):
    print json.dumps(e)
如何将所有评论编译成一个数据框架?我有两个不同的问题:

  • 如何在一个对象中编译所有评论?目前,输出是这样生成的:

    {
    "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!"
    }
    
    for e in parse("reviews.txt.gz"):
        print json.dumps(e)
    
  • 我尝试创建一个空的
    列表
    并使用
    追加

        for e in parse("reviews.txt.gz"):
            revs = []
            revs = revs.append(json.dumps(e))
    
    但这不起作用-
    打印转数
    打印出来

    None
    None
    None 
    
  • 当我在一个如上格式的评论中使用
    pd.read_json
    时,它返回“如果使用所有标量值,则必须传递一个索引”。这是否意味着我没有有效的json格式数据
  • 无需对数据调用
    json.dumps()
    ,因为这将返回一个字符串,您可以将python对象传递给Pandas
  • 您的for循环应该如下所示

    revs = []
    for e in parse("reviews.txt.gz"):
        revs = revs.append(e)
    
    但是,除非parse是一个生成器(即使用
    yield
    关键字),否则您可以只设置
    revs=parse(“reviews.txt.gz”)

  • pd.read\u json
    尝试将json解析为数据帧。。。如果您只有一列,这将抛出一个错误,因为它期望数据被双重索引
  • 因此,如果
    revs
    现在是一个字符串列表(即,您的解析函数返回数据的json表示),您可以调用

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

    df = pd.read_json(revs)
    
    df = pd.DataFrame(revs)
    

    看起来您正在为每个循环初始化一个带有
    revs=[]
    的空列表,然后将
    revs
    重新分配给
    列表的输出。append
    调用(即
    None
    list.append
    修改原始
    列表
    )。此外,您可能不需要
    json.dumps(e)
    调用,您需要的是python对象列表而不是json对象。位
    parse(“reviews.txt.gz”)
    工作正常吗?这就是您发布的json示例的产生原因吗?@cphlewis是的,json格式的示例审阅是由
    parse(“file”)
    生成的@jeff当然,必须在循环外初始化列表。谢谢,谢谢@Alex!!Parse是一个生成器。删除对json.dumps的调用并在循环外部初始化revs解决了问题1。这样就产生了一个字典列表,调用pd.DataFrame解决了问题2。