我有以下JSON对象,并尝试将其转换为DataFrame。
数据:
{
"data": {
"docs": [
{
"id": "1",
"col1": "foo",
"col2": "123",
"list": ["foo barr, fooo"]
},
{
"id": "2",
"col1": "abc",
"col2": "321",
"list": ["lirum epsum"]
},
{
"id": "3",
"col1": "foo",
"col2": "123",
"list": null
}
}
]
}
}
理想情况下,列表列应该包含字符串而不是列表,并且看起来像这样:
id col1 col2 list
1 foo 123 'foo barr, fooo'
2 abc 321 'lirum epsum'
3 foo 123 NaN
以下方法引发异常(TypeError:“ NoneType”对象不可迭代):
with open(path_to_json, encoding='utf-8') as json_file:
q= json.load(json_file)
df = json_normalize(q['data'], record_path=['docs', 'list'])
答案 0 :(得分:2)
我还不能添加评论来完成上述答案,但是您可以使用此代码将列列表转换为字符串
df['list']=df['list'].apply(lambda x: str(x).strip('[\']'))
答案 1 :(得分:0)
json = {
"data": {
"docs": [
{
"id": "1",
"col1": "foo",
"col2": "123",
"list": ["foo barr, fooo"]
},
{
"id": "2",
"col1": "abc",
"col2": "321",
"list": ["lirum epsum"]
},
{
"id": "3",
"col1": "foo",
"col2": "123",
"list": np.nan
},
]
}
}
pd.DataFrame(json["data"]["docs"]).set_index("id")
给你
id col1 col2 list
1 foo 123 [foo barr, fooo]
2 abc 321 [lirum epsum]
3 foo 123 NaN