Python 将多个json对象转换为数据帧
我是python新手,在一些概念上似乎非常简单的问题上遇到了麻烦。我已经读了很多这样的帖子,但仍然不能解决我的问题 我有一个将amazon评论转换为json格式的函数。每次审阅都成为一个json对象。我希望在一个数据框架中编译所有评论,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
{
"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对象传递给Pandasrevs = []
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。