将 JSON 读取到 pandas 数据框 - ValueError:将 dicts 与非系列混合可能会导致排序不明确
Posted
技术标签:
【中文标题】将 JSON 读取到 pandas 数据框 - ValueError:将 dicts 与非系列混合可能会导致排序不明确【英文标题】:Read JSON to pandas dataframe - ValueError: Mixing dicts with non-Series may lead to ambiguous ordering 【发布时间】:2018-09-05 10:45:55 【问题描述】:我正在尝试将下面的 JSON 结构读入 pandas 数据帧,但它会抛出错误消息:
ValueError:将字典与非系列混合可能会导致模棱两可 订购。
Json 数据:
"status":
"statuscode": 200,
"statusmessage": "Everything OK"
,
"result": [
"id": 22,
"club_id": 16182
,
"id": 23,
"club_id": 16182
,
"id": 24,
"club_id": 16182
,
"id": 25,
"club_id": 16182
,
"id": 26,
"club_id": 16182
,
"id": 27,
"club_id": 16182
]
我怎样才能做到这一点?我试过下面的脚本...
j_df = pd.read_json('json_file.json')
j_df
with open(j_file) as jsonfile:
data = json.load(jsonfile)
【问题讨论】:
【参考方案1】:如果您只需要数据框中的结果部分,那么这里的代码可以帮助您。
import json
import pandas as pd
data = json.load(open('json_file.json'))
df = pd.DataFrame(data["result"])
【讨论】:
【参考方案2】:您可以将json_normalize
与assign
一起使用:
from pandas.io.json import json_normalize
import json
with open('json_file.json') as data_file:
d= json.load(data_file)
df = json_normalize(d, 'result').assign(**d['status'])
print (df)
club_id id statuscode statusmessage
0 16182 22 200 Everything OK
1 16182 23 200 Everything OK
2 16182 24 200 Everything OK
3 16182 25 200 Everything OK
4 16182 26 200 Everything OK
5 16182 27 200 Everything OK
【讨论】:
【参考方案3】:如果您只需要数据框中的结果部分,这里的代码可以帮助您:
import json
import pandas as pd
data = json.load(open('json_file.json'))
df = pd.DataFrame(data["result"])
据我所知,发生 ValueError 是因为数据类型到处都是,一些字符串,一些列表,多个 等。这个错误可以通过规范化数据来解决。为此,下面是代码:
import json
with open('json_file.json') as project_file:
data = json.load(project_file)
df = pd.json_normalize(data)
【讨论】:
模块 'pandas' 没有属性 'json_normalize' 如果你得到上述错误“pandas”没有属性“json_normalize”,那么试试df=pd.json_normalize(data)。这是在 json 上调用 normalize 函数的新方法。以上是关于将 JSON 读取到 pandas 数据框 - ValueError:将 dicts 与非系列混合可能会导致排序不明确的主要内容,如果未能解决你的问题,请参考以下文章
从大型 JSON 中读取特定字段并导入 Pandas 数据框