我是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数据框?我有两个不同的问题:
如何在一个对象中编译所有评论?目前,输出生成如下:
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
pd.read_json
时,它返回"如果使用所有标量值,则必须传递索引"。这是否意味着我没有有效的json格式数据?答案 0 :(得分: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")
pd.read_json
尝试将json解析为DataFrame ...如果您只有一列,则会抛出错误,因为它希望数据被双重索引。因此,如果revs
现在是一个字符串列表(即你的解析函数返回数据的json表示),你可以调用
df = pd.read_json(revs)
否则,如果revs现在是一个字典列表(即你的解析函数已经解释了json并返回了数据的字典),你可以调用
df = pd.DataFrame(revs)