如何将 JSON 非列表项与 pandas.json_normalize 和 Python 的列表项一起列出?
How to list JSON non-list items together with list items with pandas.json_normalize with Python?
[{
"builtin_name": "custom_template",
"fields": [{
"id": 10012,
"field_type": "OBJECT_SET",
"tooltip_text": "",
"name_plural": "",
"name_singular": "reference",
"backref_name": "reference",
"backref_tooltip_text": "",
"allow_multiple": False,
"allowed_otypes": [
"schema",
"table",
"attribute",
"user",
"groupprofile",
"groupprofile"
],
"options": None,
"builtin_name": None
}, {
"id": 8,
"field_type": "OBJECT_SET",
"tooltip_text": None,
"name_plural": "Stewards",
"name_singular": "Steward",
"backref_name": "Steward",
"backref_tooltip_text": None,
"allow_multiple": True,
"allowed_otypes": [
"user",
"groupprofile",
"groupprofile"
],
"options": None,
"builtin_name": "steward"
}
],
"id": 16,
"title": "Custom template"
}]
使用此 JSON 对象,我想使用 pandas.json_normalize.
对其进行规范化
当我这样做时:
pd.json_normalize(data, "fields", errors='ignore', record_prefix='')
我得到的 fields
以漂亮的 table 形式列出,如下所示:
id field_type tooltip_text name_plural name_singular backref_name backref_tooltip_text allow_multiple allowed_otypes options builtin_name
(后面是数据行)
但我也是外部属性,id
、title
和 builtin_name
与字段一起列出
所以我这样结束:
id builtin_name title id field_type tooltip_text name_plural name_singular backref_name backref_tooltip_text allow_multiple allowed_otypes options builtin_name
我试过这个:
pd.json_normalize(data, ["id", "builtin_name", "title"], "fields", errors='ignore', record_prefix='')
但是它抛出一个错误,指出 id 不是一个列表。
也试过没有方括号无济于事。
如何让这些字段 "id", "builtin_name", "title"
与每行中的其他字段一起列出?
谢谢!
我会在整个 data
列表中使用 .json_normalize
,在 fields
列中使用 .explode()
。然后连接回去获得所需的DataFrame:
df = pd.json_normalize(data, errors="ignore", record_prefix="")
df = pd.concat(
[df, df.explode("fields")["fields"].apply(pd.Series)], axis=1
).drop(columns="fields")
print(df)
打印:
builtin_name id title id field_type tooltip_text name_plural name_singular backref_name backref_tooltip_text allow_multiple allowed_otypes options builtin_name
0 custom_template 16 Custom template 10012 OBJECT_SET reference reference False [schema, table, attribute, user, groupprofile,... None None
0 custom_template 16 Custom template 8 OBJECT_SET None Stewards Steward Steward None True [user, groupprofile, groupprofile] None steward
[{
"builtin_name": "custom_template",
"fields": [{
"id": 10012,
"field_type": "OBJECT_SET",
"tooltip_text": "",
"name_plural": "",
"name_singular": "reference",
"backref_name": "reference",
"backref_tooltip_text": "",
"allow_multiple": False,
"allowed_otypes": [
"schema",
"table",
"attribute",
"user",
"groupprofile",
"groupprofile"
],
"options": None,
"builtin_name": None
}, {
"id": 8,
"field_type": "OBJECT_SET",
"tooltip_text": None,
"name_plural": "Stewards",
"name_singular": "Steward",
"backref_name": "Steward",
"backref_tooltip_text": None,
"allow_multiple": True,
"allowed_otypes": [
"user",
"groupprofile",
"groupprofile"
],
"options": None,
"builtin_name": "steward"
}
],
"id": 16,
"title": "Custom template"
}]
使用此 JSON 对象,我想使用 pandas.json_normalize.
对其进行规范化当我这样做时:
pd.json_normalize(data, "fields", errors='ignore', record_prefix='')
我得到的 fields
以漂亮的 table 形式列出,如下所示:
id field_type tooltip_text name_plural name_singular backref_name backref_tooltip_text allow_multiple allowed_otypes options builtin_name
(后面是数据行)
但我也是外部属性,id
、title
和 builtin_name
与字段一起列出
所以我这样结束:
id builtin_name title id field_type tooltip_text name_plural name_singular backref_name backref_tooltip_text allow_multiple allowed_otypes options builtin_name
我试过这个:
pd.json_normalize(data, ["id", "builtin_name", "title"], "fields", errors='ignore', record_prefix='')
但是它抛出一个错误,指出 id 不是一个列表。
也试过没有方括号无济于事。
如何让这些字段 "id", "builtin_name", "title"
与每行中的其他字段一起列出?
谢谢!
我会在整个 data
列表中使用 .json_normalize
,在 fields
列中使用 .explode()
。然后连接回去获得所需的DataFrame:
df = pd.json_normalize(data, errors="ignore", record_prefix="")
df = pd.concat(
[df, df.explode("fields")["fields"].apply(pd.Series)], axis=1
).drop(columns="fields")
print(df)
打印:
builtin_name id title id field_type tooltip_text name_plural name_singular backref_name backref_tooltip_text allow_multiple allowed_otypes options builtin_name
0 custom_template 16 Custom template 10012 OBJECT_SET reference reference False [schema, table, attribute, user, groupprofile,... None None
0 custom_template 16 Custom template 8 OBJECT_SET None Stewards Steward Steward None True [user, groupprofile, groupprofile] None steward