我在JSON文件中有嵌套字典对象的列表。我正在尝试创建此文件的DataFrame。
这是前2个对象:
data= [ {
"model": "class",
"pk": 48,
"fields": {
"unique_key": "9f030ed1d5e56523",
"name": "john",
"follower_count": 2395,
"profile_image": " "
} } ,{
"model": "class",
"pk": 49,
"fields": {
"unique_key": "0e8256ad7f27270eb",
"name": "dais",
"follower_count": 264,
"profile_image": " "
} }, .....]
如果我尝试类似的操作:
df = pd.DataFrame(data)
这就是我得到的。
我一直在寻找帮助,但发现this,但问题是该列表没有keys()函数。
答案 0 :(得分:0)
看起来这是可以使用for循环展平的数据:
new_data = []
for item in data:
new_entry = {}
for k,v in item.items():
# a dictionary will return True for isinstance(v, dict)
if not isinstance(v, dict):
# v is not a dictionary here
new_entry[k] = v
else:
# v is a dictionary, so we flatten it
for a,b in v.items():
new_entry[a] = b
new_data.append(new_entry)
df = pd.DataFrame(new_data)
内部循环是使用if k=='Fields'
之类的更通用的方法,该方法将更加针对您的问题
答案 1 :(得分:0)
假设您只有1级嵌套字典,并且您知道键名:
for d in data:
d.update(d.pop('fields'))
您只需要从字典中“弹出”元素并将内部键值数据添加到基本级别即可。 update
方法将后者用作就地操作。
现在,您可以使用期望的列创建熊猫数据框:
In [5]: pd.DataFrame(data)
Out[5]:
follower_count model name pk profile_image unique_key
0 2395 class john 48 9f030ed1d5e56523
1 264 class dais 49 0e8256ad7f27270eb