JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。嵌套字典列表是指在一个列表中包含多个字典,而这些字典中可能还包含其他字典或列表。
Pandas DataFrame 是一个二维的表格型数据结构,可以存储多种类型的数据,并且具有强大的数据处理和分析功能。
在数据分析、数据清洗、数据可视化等场景中,经常需要将 JSON 数据转换为 DataFrame,以便进行进一步的数据处理和分析。
假设我们有以下 JSON 嵌套字典列表:
[
{"name": "Alice", "age": 25, "hobbies": ["reading", "swimming"]},
{"name": "Bob", "age": 30, "hobbies": ["gaming", "hiking"]},
{"name": "Charlie", "age": 35, "hobbies": ["cooking", "painting"]}
]
我们可以使用 Pandas 将其转换为 DataFrame:
import pandas as pd
# JSON 嵌套字典列表
data = [
{"name": "Alice", "age": 25, "hobbies": ["reading", "swimming"]},
{"name": "Bob", "age": 30, "hobbies": ["gaming", "hiking"]},
{"name": "Charlie", "age": 35, "hobbies": ["cooking", "painting"]}
]
# 转换为 DataFrame
df = pd.DataFrame(data)
print(df)
name age hobbies
0 Alice 25 [reading, swimming]
1 Bob 30 [gaming, hiking]
2 Charlie 35 [cooking, painting]
原因:JSON 数据格式不符合标准,例如缺少引号、逗号等。
解决方法:确保 JSON 数据格式正确,可以使用在线 JSON 校验工具进行检查和修正。
原因:JSON 数据嵌套层级过深,Pandas 默认情况下可能无法直接解析。
解决方法:可以使用递归函数或其他方法手动解析嵌套数据,然后再转换为 DataFrame。例如:
import json
def flatten_json(y):
out = {}
def flatten(x, name=''):
if type(x) is dict:
for a in x:
flatten(x[a], name + a + '_')
elif type(x) is list:
i = 0
for a in x:
flatten(a, name + str(i) + '_')
i += 1
else:
out[name[:-1]] = x
flatten(y)
return out
# 嵌套字典列表
nested_data = [
{"name": "Alice", "info": {"age": 25, "hobbies": ["reading", "swimming"]}},
{"name": "Bob", "info": {"age": 30, "hobbies": ["gaming", "hiking"]}},
{"name": "Charlie", "info": {"age": 35, "hobbies": ["cooking", "painting"]}}
]
# 扁平化嵌套数据
flattened_data = [flatten_json(item) for item in nested_data]
# 转换为 DataFrame
df = pd.DataFrame(flattened_data)
print(df)
name info_age info_hobbies_0 info_hobbies_1
0 Alice 25 reading swimming
1 Bob 30 gaming hiking
2 Charlie 35 cooking painting
通过以上方法,可以有效地将 JSON 嵌套字典列表转换为 DataFrame,并解决常见的转换问题。
领取专属 10元无门槛券
手把手带您无忧上云