将嵌套的JSON结构转换为Pandas DataFrame可以使用Pandas库中的json_normalize函数,以下是详细步骤:
- 导入 Pandas 库:
import pandas as pd
- 使用 json_normalize 函数读取 json 数据,json_normalize 函数可以将嵌套的 json 结构转换为扁平的表格结构:
df = pd.read_json(json_string)
df = pd.json_normalize(json_data, 'key')
其中,json_string 是 json 数据的字符串形式,json_data 是 json 数据的 Python 对象形式。'key'参数表示嵌套 json 结构的层级,可以使用一到多个层级。
- 如果 json 数据中有嵌套的列表,可以使用 record_path 参数指定路径:
df = pd.json_normalize(json_data, record_path='key.key')
其中,'key.key'表示嵌套的 json 结构的层级路径,可以是多层级。record_path参数还可以是一个列表,指定多个嵌套的列表路径。
- 如果 json 数据中有嵌套的字典,可以使用 meta 参数指定元数据:
df = pd.json_normalize(json_data, record_path='key.key', meta=['key1', 'key2'])
其中,'key1'和'key2'是 json 数据中的一级或多级嵌套字典中的键,可以在 meta 参数中指定多个键。
- 如果 json 数据中有不规则的嵌套结构,可以使用 errors 参数忽略:
df = pd.json_normalize(json_data, 'key', errors='ignore')
其中,errors 参数可以是'raise','ignore'和'coerce'三个值,分别表示报错,忽略和转换为 NaN。
以下是一个完整的代码示例:
import json
import pandas as pd
# JSON 数据
json_data = [
{
'id': 1,
'name': 'John',
'age': 30,
'contact': {
'phone': '123456',
'email': 'john@example.com'
},
'scores': [
{
'subject': 'Math',
'score': 99
},
{
'subject': 'English',
'score': 88
}
]
},
{
'id': 2,
'name': 'Mike',
'age': 25,
'contact': {
'phone': '456789',
'email': 'mike@example.com'
},
'scores': [
{
'subject': 'Math',
'score': 90
},
{
'subject': 'English',
'score': 95
}
]
}
]
# 将 JSON 数据转换为 Pandas DataFrame
df = pd.json_normalize(json_data,
record_path=['scores'],
meta=[['id'], ['name'], ['contact', 'phone'], ['contact', 'email'], ['age']],
errors='ignore')
# 打印结果
print(df)
输出结果如下:
subject score id name contact.phone contact.email age
0 Math 99 1 John 123456 john@example.com 30
1 English 88 1 John 123456 john@example.com 30
2 Math 90 2 Mike 456789 mike@example.com 25
3 English 95 2 Mike 456789 mike@example.com 25
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:将嵌套的JSON结构转换为Pandas DataFrames - Python技术站