【问题标题】:Weird nested dict to dataframe奇怪的嵌套字典到数据框
【发布时间】:2021-09-25 08:10:12
【问题描述】:

您好,我想将嵌套字典制作成数据框

已经为数据框的嵌套字典查找了其他答案,但它似乎不起作用。

d= {​​​​"info":{​​​​"nest":{​​​​"pno":"abc","c":"US","moreinfo":{​​​​"a":"Xlab","b":"miner","currency":"USD","data":0,"make":"new","value":"false","infolang":"[]","Type":"null","Desc":"poppy(a)","tera":"0-982","population":432,"additionalpop":"1 M","price":600,"log":"J01","additionalinfomore":[{​​​​"date":"01012000","tera":"AGREED_AGE","paintnumber":"p","displayFromLink":"true","additionalinfomorev":{​​​​"phone":"null","email":"null","connection":"noconnection"}​​​​,"cached":"null","blob":"null","clarify":"ok"}​​​​​​​}​​​​}

它有这么多嵌套的字典..

我尝试了以下方法:

df.columns=df.column.map(lambda x :x.split(".")[-1])
df

只工作了一部分。

有人可以帮忙吗?

【问题讨论】:

  • 你希望你的数据框是什么样子的?现在看起来怎么样?您提供的代码根本与将字典转换为数据框无关。
  • 我希望所有的键都是列,所有的值都是列中的值
  • 请编辑您的问题以包含预期结果。字典和数据框本质上是不同的数据结构。所以很不清楚你的输出应该是什么样子。

标签: python pandas dataframe dictionary dictionary-comprehension


【解决方案1】:

我知道解决此问题的唯一方法是使用嵌套的 for 循环,直到您访问要编辑的级别。可能有比这个更好的解决方案,但这是我知道的一个。

您首先创建一个包含主字典键的列表:

keys_list = list(dict.keys())

然后你必须通过访问嵌套字典的键来输入每一层的键。它看起来像:

for key in keys_list:
    inner_keys = dict[key].keys()
    for inner_key in inner_keys:
            df = pd.DataFrame(dict[key][inner_key])

不幸的是,您需要使用循环访问基本级别。您需要使用 N-1 循环才能到达您的信息嵌套的任何级别。在您的情况下,看起来您有一个 4 维字典,从我的解释来看 .因此,您将需要 3 个循环来访问您的信息,这意味着您将拥有一个具有 n 立方的大 O 的算法。

这意味着,如果一个操作通常需要 3 秒来运行您的第一级键,则大约需要 27 秒才能到达您的较低级别的数据。这种算法在访问您的数据方面效率极低。

在 3 或 4 维之后,尝试不同的东西可能会更好。更好的方法可能是实例化单独的 3 维字典,您可以稍后调用。

如果您有任何问题,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 2023-03-23
    • 2018-04-14
    • 2019-09-25
    • 1970-01-01
    相关资源
    最近更新 更多