Python-Json到数据帧

Python-Json到数据帧,python,json,pandas,dataframe,Python,Json,Pandas,Dataframe,我有一个复杂的Json文件,如下所示: { "User A" : { "Obj1" : { "key1": "val1", "key2": "val2", "key3": "val3", } "Obj2" : { "key1": "val1", "key2": "val2", "key3": "val3" } } "User B" : {

我有一个复杂的Json文件,如下所示:

{
  "User A" : {
     "Obj1" : {
        "key1": "val1",
        "key2": "val2",
        "key3": "val3",
     }
     "Obj2" : {
        "key1": "val1",
        "key2": "val2",
        "key3": "val3"
     }
  }
  "User B" : {
     "Obj1" : {
        "key1": "val1",
        "key2": "val2",
        "key3": "val3",
        "key4": "val4"
     }
  }
}
                key1   key2   key3   key4
User A   Obj1   val1   val2   val3    NaN
         Obj2   val1   val2   val3    NaN
User B   Obj1   val1   val2   val3    val4
我想把它变成一个数据帧,看起来像这样:

{
  "User A" : {
     "Obj1" : {
        "key1": "val1",
        "key2": "val2",
        "key3": "val3",
     }
     "Obj2" : {
        "key1": "val1",
        "key2": "val2",
        "key3": "val3"
     }
  }
  "User B" : {
     "Obj1" : {
        "key1": "val1",
        "key2": "val2",
        "key3": "val3",
        "key4": "val4"
     }
  }
}
                key1   key2   key3   key4
User A   Obj1   val1   val2   val3    NaN
         Obj2   val1   val2   val3    NaN
User B   Obj1   val1   val2   val3    val4
这对熊猫有可能吗?如果是的话,我如何才能做到这一点

  • 如果更简单,我不介意删除User和Obj的前两列,只保留键的列

您可以先将文件读取到dict:

with open('file.json') as data_file:    
    dd = json.load(data_file)

print(dd)
{'User B': {'Obj1': {'key2': 'val2', 'key4': 'val4', 'key1': 'val1', 'key3': 'val3'}}, 
'User A': {'Obj1': {'key2': 'val2', 'key1': 'val1', 'key3': 'val3'}, 
'Obj2': {'key2': 'val2', 'key1': 'val1', 'key3': 'val3'}}}
然后使用
听写理解

另一个解决方案是,但首先需要通过重塑和删除
NaN
行。最后需要:



你真是帮了大忙,谢谢!无法想象我工作了一个小时,只需要两行代码就可以完成,如此优雅。。。是否有一种简单的方法将此df保存为excel文件?感谢您的接受!当然,如果需要删除索引,请使用-
df1.to_excel('file.xlsx')
df1.to_excel('file.xlsx',index=False)
df1 = pd.DataFrame.from_records(df.values.tolist(), index = df.index)
print (df1)
             key1  key2  key3  key4
User A Obj1  val1  val2  val3   NaN
       Obj2  val1  val2  val3   NaN
User B Obj1  val1  val2  val3  val4