多层次访问JSON文件

2024-04-26 12:56:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个JSON文件,格式如下:

{  
   "total_rows":10000,
   "offset":0,
   "rows":[  
      {  
     "id":"005584833b8e2063f04ff713",
     "key":"00558433b8e2063f04ff713",
     "value":{  
        "rev":"1-8137baa51a2f335b0215ba9d08"
     },
     "doc":{  
        "_id":"0055842eb0063f04ff713",
        "_rev":"1-8137baa51a2f335b0215ba9d08",
        "value":1,
        "date":"2017-04-07T12:38:06.336Z",
        "date_inmilli":1491568686336,
        "sensorType":"sensor",
        "date":"2017-04-07T12:38:06.458Z"
     }
  }
   ]
}

我试图使用Python提取"sensorType"或{}的值。 使用下面的R代码,我可以正确地得到结果:

^{pr2}$

但是,使用Pythonpandas时,当我试图用下面的代码提取值时,会出现一个错误:

import pandas as pd
df = pd.read_json("file.json")
df['rows']['doc']['sensorType']

我正在学习Python,你能帮我解决这个问题吗?提前谢谢。在


Tags: 文件代码idjsondfdatedocvalue
2条回答

您可以使用python dict get方法:

您可以通过打印dir(object)来检查任何对象的所有可用方法:

print(dir(dict))

['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

用途:

^{pr2}$

输出:

sensor

对于pandas,您可以创建一个新的数据帧,并用for循环更新它,如下所示:

raw_data = []

raw_data.append(data.get('rows')[0].get('doc').get('sensorType'))

df = pd.DataFrame(raw_data, columns = ['sensorType'])

print(df)

输出:

  sensorType
0     sensor

rows是对象列表请尝试以下操作:

df['rows'][0]['doc']['sensorType']

或者,如果在rows列表中有许多对象,则需要使用for loop statment

^{pr2}$

更新 把这些值放到一个更python方式的数据帧中是这样的

df1 = pd.DataFrame([row['doc']['sensorType'] for row in df['rows']])

print(df1)

相关问题 更多 >