我有这个样本JSON
{
"name":"John",
"age":30,
"cars": [
{ "name":"Ford", "models":[ "Fiesta", "Focus", "Mustang" ] },
{ "name":"BMW", "models":[ "320", "X3", "X5" ] },
{ "name":"Fiat", "models":[ "500", "Panda" ] }
]
}
当我需要将JSON转换为pandas DataFrame时,我使用以下代码
import json
from pandas.io.json import json_normalize
from pprint import pprint
with open('example.json', encoding="utf8") as data_file:
data = json.load(data_file)
normalized = json_normalize(data['cars'])
此代码运行良好,但在某些空车(空值)的情况下,我无法进行normalize_json。
json的例子
{
"name":"John",
"age":30,
"cars": [
{ "name":"Ford", "models":[ "Fiesta", "Focus", "Mustang" ] },
null,
{ "name":"Fiat", "models":[ "500", "Panda" ] }
]
}
抛出的错误
AttributeError: 'NoneType' object has no attribute 'keys'
我试图忽略json_normalize中的错误,但没有帮助
normalized = json_normalize(data['cars'], errors='ignore')
我应该如何处理JSON中的空值?
答案 0 :(得分:0)
您可以用空的格来填充cars
,以防止出现此错误
data['cars'] = data['cars'].apply(lambda x: {} if pd.isna(x) else x)
答案 1 :(得分:0)
我同意vozman的观点,并且填写空白{}
词典将解决此问题。但是,我的项目也遇到了同样的问题,我制作了一个程序包来处理这种DataFrame。检出flat-table,它使用json_normalize,但也可以扩展行和列。
import flat_table
df = pd.DataFrame(data)
flat_table.normalize(df)
这将输出以下内容。列表扩展到不同的行,字典键扩展到不同的列。
index name_x age name_y models
0 0 John 30 Ford Fiesta
1 0 John 30 Ford Focus
2 0 John 30 Ford Mustang
3 1 John 30 NaN NaN
4 2 John 30 Fiat 500
5 2 John 30 Fiat Panda