来自嵌套字典的 Pandas 数据框

2023-11-27

我的字典看起来像这样:

{'x': {'b': 10, 'c': 20}, 'y': {'b': '33', 'c': 44}}

我想获得一个如下所示的数据框:

index   col1    col2    val
0        x       b      10
1        x       c      20
2        y       b      33
3        y       c      44

我尝试调用 pandas.from_dict(),但它没有给我想要的结果。 那么,实现这一目标的最优雅、最实用的方法是什么?

编辑:实际上,我的字典深度为 4,所以我希望看到一种针对这种情况的解决方案,或者理想情况下,一种可以在一般设置中适用于任意深度的解决方案。

这是一个更深层次字典的例子:{'x':{'a':{'m':1, 'n':2}, 'b':{'m':10, 'n':20}}, 'y':{'a':{'m':100, 'n':200}, 'b':{'m':111, 'n':222}} }适当的数据框应有 8 行。

回答:

df = pd.DataFrame([(k1, k2, k3, k4, k5, v) for k1, k2345v in dict.items()
                           for k2, k345v in k2345v.items()
                           for k3, k45v in k345v.items()
                           for k4, k5v in k45v.items()
                           for k5, v in k5v.items()])

对于任何深度,您可以使用pd.json_normalize and melt。下面是一个稍微修改过的 2/3/4 深度字典的示例

data = {'one': 1, 'two': {'a': 2}, 'four': {'a': {'b': {'c': 2}}},
        'x': {'a': {'m': 1, 'n': 2}, 'b': {'m': 10, 'n': 20}},
        'y': {'a': {'m': 100, 'n': 200}, 'b': {'m': 111, 'n': 222}}}
df_melt = pd.json_normalize(data, sep='>>').melt()
df_final = df_melt['variable'].str.split('>>', expand=True)
df_final.columns = [f'col{name}' for name in df_final.columns]
df_final[['value']] = df_melt['value']
    col0  col1  col2  col3  value
0    one  None  None  None      1
1    two     a  None  None      2
2   four     a     b     c      2
3      x     a     m  None      1
4      x     a     n  None      2
5      x     b     m  None     10
6      x     b     n  None     20
7      y     a     m  None    100
8      y     a     n  None    200
9      y     b     m  None    111
10     y     b     n  None    222

json_normalize真的很有用,还有一些额外的例子Medium

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

来自嵌套字典的 Pandas 数据框 的相关文章

  • AttributeError:模块“tensorflow.python.framework.ops”没有属性“RegisterShape”

    我正在使用 TensorFlow 2 1 0 dev20191125 不幸的是 我无法编译一个带有错误的简单示例 AttributeError 模块 tensorflow python framework ops 没有 属性 Registe
  • Ubuntu Python shebang 线不工作

    无法让 shebang 线在 Ubuntu 中为 python 脚本工作 我每次只收到命令未找到错误 test py usr bin env python print Ran which python usr bin python 在 sh
  • PyQt4 信号和槽

    我正在使用 PyQt4 编写我的第一个 Python 应用程序 我有一个 MainWindow 和一个 Dialog 类 它是 MainWindow 类的一部分 self loginDialog LoginDialog 我使用插槽和信号 这
  • 使用 for 循环 Python 为数组赋值

    我正在尝试将字符串的值分配给不同的数组索引 但我收到一个名为 列表分配超出范围 的错误 uuidVal distVal uuidArray distArray for i in range len returnedList for beac
  • python 类的属性不在 __init__ 中

    我想知道为什么下面的代码有效 usr bin env python3 import sys class Car def init self pass if name main c Car c speed 3 c time 5 print c
  • 使用 pygtk3 将 GUI 窗口添加到 python opencv2 程序

    我已经使用Python和Opencv2完成了一个程序 现在 我想向我的程序添加一个 GUI 窗口 我对 PyGtk3 有一些经验 因此 我修改了代码以采用 PyGtk3 但是 我遇到了错误 因此 我尝试了一个简单的程序来找出实际的错误 我的
  • 不使用 graphviz/web 可视化决策树

    由于某些限制 我无法使用 graphviz webgraphviz com 可视化决策树 工作网络与另一个世界是封闭的 问题 是否有一些替代实用程序或一些 Python 代码用于至少非常简单的可视化可能只是决策树的 ASCII 可视化 py
  • SQLAlchemy 默认日期时间

    这是我的声明模型 import datetime from sqlalchemy import Column Integer DateTime from sqlalchemy ext declarative import declarati
  • 自定义信号的声明

    在 Qt 中 我们可以通过将自定义信号设为静态变量来创建它们 然后我们使用self signame反而classname signame 这样就在类中创建了一个实例变量 我想了解这种模式之外的理论 这是我尝试过的一些伪代码 这些伪代码已记录
  • Pythoncom - 将相同的 COM 对象传递给多个线程

    你好 对于 COM 对象 我是一个完全的初学者 非常感谢任何帮助 我正在开发一个Python程序 该程序应该以客户端 服务器的方式读取传入的MS Word文档 即客户端发送一个请求 一个或多个MS Word文档 服务器使用pythoncom
  • Tensorflow 到 ONNX 的转换

    我目前正在尝试转换我使用本教程创建的已保存 且正在工作 的 pb 文件 https github com thtrieu darkflow https github com thtrieu darkflow 到 onnx 文件中 我目前正在
  • Python:动态向对象添加字段

    我想知道是否可以动态向对象添加字段 例如 我希望能够添加如下内容 user object user first name John user last name Smith 当我在 Python 命令行解释器中执行该命令时 我得到 Attr
  • 如何使用lxml和python更新xml文件?

  • wxPython:更新wx.ListBox列表

    我在 python 程序中有一个 wx ListBox 我不想在 wx Timer 更新时更改其中的列表 我的计时器正在工作 我只是不知道如何更改它显示的列表 这是一个例子 http www daniweb com code snippet
  • 安装python启动文件

    我如何安装pythonstartup文件 以便它在命令上运行 例如python myfile py 我尝试将其安装到我的 home myuserUbuntu的目录 但它说我没有足够的权限 此外 不同的地方交替说它应该全部大写或全部小写 前面
  • Python写入dbf数据时出错

    我得到这个错误 DbfError unable to modify fields individually except in with or Process 如何修复它 这是我的code with dbf Table aa dbf as
  • Numba jitclass 不适用于 python 列表

    我在用python 3 6 and numba 0 36 这个问题有一个sister https stackoverflow com questions 48159360 numba custom stack class and pop f
  • Django:在单独的线程中使用相同的测试数据库

    我正在使用具有以下数据库设置的测试数据库运行 pytests DATABASES default ENGINE django db backends postgresql psycopg2 NAME postgres USER someth
  • 透视包含字符串的 Pandas Dataframe - “没有要聚合的数字类型”错误

    关于此错误有很多问题 但环顾四周后 我仍然无法找到 解决解决方案 我正在尝试用字符串旋转数据框 以使一些行数据变成列 但到目前为止还没有成功 我的 df 的形状
  • 从 xgb.train() 获取概率

    我是 Python 和机器学习的新手 我在网上搜索了我的问题 并尝试了人们建议的解决方案 但仍然没有得到它 如果有人能帮助我 我将非常感激 我正在开发我的第一个 XGboost 模型 我已经使用 xgb XGBClassifier 调整了参

随机推荐

  • DropDownList 不会在 SelectedIndexChanged 上回发

    我正在编写一个 ASP Net Web 表单 其中包含一些 DropDownList 控件 然后用户更改下拉列表之一中的选定项目 ASP Net 似乎不会处理 SelectedIndexChanged 事件 直到通过单击 提交 按钮提交表单
  • 有没有办法使用 GPG 密钥在 Git 中“自动签名”提交?

    有没有一种简单的方法可以让 Git 始终对创建的每个提交或标签进行签名 我尝试过类似的东西 alias commit commit S 但这并没有达到目的 我不想安装不同的程序来实现这一点 可以轻松实现吗 只是一个附带问题 也许提交不应该被
  • 如何从Python 2.7中以空格分隔的字符串中提取整数?

    我想从字符串中提取整数 其中整数由空格分隔 即 我怎么能这么做 Input I 1 15 163 132 Result 1 15 163 132 所以我写了一个像这样的函数 def getIt aStr collect i 0 while
  • Spring Hibernate Template 执行方法为 Oracle 上的计数查询返回什么对象类型?

    当针对 Oracle 数据库运行时 以下对象的运行时类型是什么春季休眠模板 Spring 2 5 和 Hibernate 3 3 2GA 代码返回其中 SQL 查询是一个计数查询 例如select count from table Stri
  • SQL 中的常量和包含文件

    是否可以在 TSQL 存储过程中包含一组 常量 值 我遇到一种情况 我使用整数字段来存储位值 并且我有一小组 常量 值 用于针对该字段插入 选择 DECLARE CostsCalculated int 32 DECLARE Aggregat
  • 使用 Mysql 检索最后插入的 id

    再会 我愿意检索 Mysql 中新插入的行的 id 值 我知道有 mysqli insert id 函数 但是 我无法指定表格 如果同时进行查询 可能会存在检索到错误 id 的风险 我正在使用 Node js MySQL 我不想冒险查询最高
  • 从 applicationContext.xml 读取环境变量

    我需要读取 web xml 中定义的环境变量
  • 静态方法中的局部变量也是静态的吗?

    我想知道如果我们在静态方法中声明它们 所有局部变量都会变成静态吗 例如 public static void A int x 3 2 changeX x for int i 0 i lt x length i System out prin
  • 如何在 Sympy 中进行函数组合?

    我想做类似的事情h f g x 并能够对 h 进行微分 例如h diff x 仅针对一个功能 例如h cos x 这实际上是可能的 并且文档说得很清楚 但对于函数组合则不太清楚 如果您已经这样做了 请向我展示一个示例或将我链接到相关文档 如
  • Guice 在 UI 线程之外创建 Swing 组件有问题吗?

    我正在使用 Google Guice 作为 IOC 容器开发 Java Swing 应用程序 一切进展顺利 存在一些用户界面问题 当标准 L F 替换为推送像素时 由于 Guice 的 Swing 组件在 UI 线程之外创建 因此 Subs
  • 何时使用socket.io以及何时使用ajax

    我一直在nodejs 中编程 研究了如何使用socket io 和ajax 调用节点服务器 socket io 是为了取代 ajax 而设计的吗 我很想知道在哪些情况下使用 socket io 比较好 哪些 ajax 更好 感谢您的意见 嗯
  • 没有可用的事务性 EntityManager

    我是 jpa 和 spring 世界的新手 目前正在对一个简单的方法进行一些单元测试 但仅当我在单元测试模式下运行测试类时才会收到此错误消息 java lang IllegalStateException No transactional
  • 如何使用poi在java中读取excel(.xlsx)?

    我正在尝试用java读取excel 我有以下代码 import java io FileInputStream import java io IOException import java io InputStream import jav
  • PHP 中的 MACTripleDES

    我正在尝试获得与 C 等效的 MAC TripleDESMACTripleDES class 我尝试过以下mcrypt 但这只是 TripleDES 中的编码 我需要获取与 C 中生成的字符串等效的 MACTripleDES 字符串来验证消
  • Google OAuth 2 授权 - 将代码交换为令牌

    我正在尝试实施 Google OAuth 2 以访问 Google API 我跟随this指南 使用服务器端场景 我获取代码没有问题 服务器重定向到 localhost 这是目前重定向 URI 中允许的唯一服务器 为了实现这一目标 我去ht
  • 如何使用Tkinter模仿这个表?

    如何开始使用 Tkinter 创建类似的表 使用 Ttk TkinterTreeview小部件 这提供了一个树型布局或listview带有标题布局的样式列 As the Treeview小部件来自 Tk 的主题图标集 它在 Windows
  • 在prepareForSegue方法中防止segue?

    是否可以取消segueprepareForSegue method 我想在转场之前执行一些检查 如果条件不成立 在这种情况下 如果某些UITextField为空 显示错误消息而不是执行 segue 在 iOS 6 及更高版本中这是可能的 你
  • 用于 mysql 的开源 ER 图表工具 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我想对我拥有的数据库的数据库定义转储进行逆向工程 导入到图表形式 然后由于在这个特定数据库中没有定义外键 我希望能够手动创建表到表键映射 使用 cr
  • 将动态 JSON 对象传递到 Web API - Newtonsoft 示例

    我需要将动态 JSON 对象传递到我的 Web API 控制器 以便我可以根据它的类型对其进行处理 我尝试过使用 JSON NET 示例可以在这里看到但是当我使用Fiddler时 我可以看到传入的JObect始终为空 这是粘贴到 Fiddl
  • 来自嵌套字典的 Pandas 数据框

    我的字典看起来像这样 x b 10 c 20 y b 33 c 44 我想获得一个如下所示的数据框 index col1 col2 val 0 x b 10 1 x c 20 2 y b 33 3 y c 44 我尝试调用 pandas f