【问题标题】:Json file to dictionaryJson 文件到字典
【发布时间】:2016-03-08 18:37:49
【问题描述】:

我正在使用yelp dataset,我想将评论 json 文件解析为字典。我尝试将其加载到 pandas DataFrame 上,然后创建字典,但由于文件太大,因此非常耗时。我只想保留 user_id 和 stars 值。 json文件的一行是这样的:

{
    "votes": {
        "funny": 0, "useful": 2, "cool": 1},
    "user_id": "Xqd0DzHaiyRqVH3WRG7hzg",
    "review_id": "15SdjuK7DmYqUAj6rjGowg", "stars": 5, "date": "2007-05-17",
    "text": (
        "dr. goldberg offers everything i look for in a general practitioner.  "
        "he's nice and easy to talk to without being patronizing; he's always on "
        "time in seeing his patients; he's affiliated with a top-notch hospital (nyu) "
        "which my parents have explained to me is very important in case something "
        "happens and you need surgery; and you can get referrals to see specialists "
        "without having to see him first.  really, what more do you need?  i'm "
        "sitting here trying to think of any complaints i have about him, but i'm "
        "really drawing a blank."
    ),
    "type": "review", "business_id": "vcNAWiLM4dR7D2nwwJ7nCA"
}

我如何遍历每个“字段”(因为缺少更好的词)?到目前为止,我只能遍历每一行。

编辑

根据要求的熊猫代码:

读取 json

with open('yelp_academic_dataset_review.json') as f:
    df = pd.DataFrame(json.loads(line) for line in f)

创建字典

dict = {} 

for i, row in df.iterrows():
   business_id = row['business_id']
   user_id = row['user_id']
   rating = row['stars']
   key = (business_id, user_id)
   dict[key] = rating

【问题讨论】:

  • 有没有其他方法可以只使用熊猫?
  • 显示您的 pandas 代码以读取 json 并将其转换为字典。
  • 将此作为一般性评论添加,因为它不是特定于我的答案,您可能会考虑是否该建立数据库。对于大数据集,将内容存储在内存、平面文件或 json 文件中不再实用,是时候使用数据库了。不知道你是否在那个时候,但要记住这一点。 Python 有sqlite3——你也可以和sqlalchemy一起使用——满足“简单”的数据库需求。
  • 我想坚持使用 pandas,我认为字典是 pandas 中用于我想做的操作的最快的数据结构。之后我想找到一些特定的用户,例如对独特的地方进行了 50 多次评论的用户。

标签: python dictionary pandas


【解决方案1】:

您无需将其读入 DataFrame。 json.load() 返回一个字典。例如:

sample.json

{
“投票”:{
“有趣”:0,
“有用”:2,
“酷”:1
},
"user_id": "Xqd0DzHaiyRqVH3WRG7hzg",
"review_id": "15SdjuK7DmYqUAj6rjGowg",
“星星”:5,
"日期": "2007-05-17",
“text”:“goldberg 博士提供了我在全科医生中寻找的一切。他很好,很容易与人交谈,而且不会居高临下;他总是准时看病;他隶属于一流的医院 (nyu),该医院我的父母已经向我解释了这非常重要,以防万一发生了什么事,你需要手术;而且你可以得到转介去看专科医生,而不必先去看他。真的,你还需要什么?我坐在这里想我对他有任何抱怨,但我真的是一片空白。",
“类型”:“评论”,
“business_id”:“vcNAWiLM4dR7D2nwwJ7nCA”
}

read_json.py

import json

with open('sample.json', 'r') as fh:
    result_dict = json.load(fh)

print(result_dict['user_id'])
print(result_dict['stars'])

输出

Xqd0DzHaiyRqVH3WRG7hzg
5

使用该输出,您可以轻松创建 DataFrame。

关于将 json 解析为 SO 上的流有几个很好的讨论,但要点是它本身是不可能的,尽管一些工具似乎在尝试它。

为了让您的代码保持简单且依赖最少,您可能会看看将 json 目录读入字典是否足够改进。

【讨论】:

  • 我已经尝试过了,但我得到一个错误可能是因为 json 有一些嵌套值。错误:ValueError: Extra data: line 2 column 1 - line 1569265 column 1 (char 763 - 1426365176)
  • @mnmbs 看看这个 Stackoverflow 答案;它可能会有所帮助:Python json.loads shows ValueError: Extra data
  • 文件必须以二进制模式读取 (with open('sample.json', 'rb') as fh)。简单的 'r' 可能会产生 UnicodeDecodeError。 (这在我身上发生了很多次。)
猜你喜欢
  • 2017-03-25
  • 1970-01-01
  • 2013-04-20
  • 2015-03-21
  • 2015-06-15
  • 2013-06-07
  • 2015-10-22
  • 2016-08-19
  • 1970-01-01
相关资源
最近更新 更多