我有一个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"
或"value"
的值。
使用下面的R代码,我能够正确地得到结果:
library(jsonlite)
df <- fromJSON("file.json")
df$rows$doc$sensorType
然而,使用Python pandas
时,当我尝试使用以下代码提取值时出现错误:
import pandas as pd
df = pd.read_json("file.json")
df['rows']['doc']['sensorType']
我正在尝试学习 Python ,你能帮忙解决这个问题吗?提前谢谢。
答案 0 :(得分:5)
rows
是一个对象列表,试试这个:
df['rows'][0]['doc']['sensorType']
如果rows
列表中有多个对象,则需要使用for loop statment
for row in df['rows']:
print(row['doc']['sensorType'])
<强>更新强> 要将这些值放到数据帧中更加pythonic方式是这个
df1 = pd.DataFrame([row['doc']['sensorType'] for row in df['rows']])
print(df1)
答案 1 :(得分:1)
你可以使用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']
用途:
data={
"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",
}
}
]
}
print(data.get('rows')[0].get('doc').get('sensorType'))
输出:
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