如何使用 df.to_dict() 轻松共享示例数据框

2024-12-03 08:45:00
admin
原创
153
摘要:问题描述:尽管有关于如何提出一个好问题?和如何创建一个最小、可重现的示例的明确指导,但许多人似乎只是忽略了在他们的问题中包含一个可重现的数据样本。那么,当简单的方法不够时,什么是重现数据样本的实用且简单的方法呢pd.DataFrame(np.random.random(size=(5, 5)))?例如,如何使...

问题描述:

尽管有关于如何提出一个好问题?和如何创建一个最小、可重现的示例的明确指导,但许多人似乎只是忽略了在他们的问题中包含一个可重现的数据样本。那么,当简单的方法不够时,什么是重现数据样本的实用且简单的方法呢pd.DataFrame(np.random.random(size=(5, 5)))?例如,如何使用df.to_dict()并将输出包含在问题中?


解决方案 1:

答案:

在许多情况下,使用方法df.to_dict()就可以完美地完成工作!以下是我想到的两种情况:

案例 1: 你已从本地源用 Python 构建或加载了一个数据框

情况 2: 你在另一个应用程序(例如 Excel)中有一个表格


详细信息:

案例 1: 你有一个从本地源构建或加载的数据框

假设你有一个名为的 pandas 数据框df,只需

  1. df.to_dict()在控制台或编辑器中运行,然后

  2. 复制格式化为字典的输出,并

  3. 将内容粘贴到pd.DataFrame(<output>)您现在可重现的代码片段中并将其包含在其中。


情况 2: 你在另一个应用程序(例如 Excel)中有一个表格

根据源和分隔符(例如(',', ';' '\s+')后者表示任何空格),您可以简单地:

  1. Ctrl+C内容

  2. df=pd.read_clipboard(sep='\s+')在控制台或编辑器中运行,然后

  3. 运行df.to_dict(),并且

  4. 包括输出df=pd.DataFrame(<output>)

在这种情况下,你的问题的开头应该是这样的:

import pandas as pd
df = pd.DataFrame({0: {0: 0.25474768796402636, 1: 0.5792136563952824, 2: 0.5950396800676201},
                   1: {0: 0.9071073567355232, 1: 0.1657288354283053, 2: 0.4962367707789421},
                   2: {0: 0.7440601352930207, 1: 0.7755487356392468, 2: 0.5230707257648775}})

当然,如果数据帧较大,这种方法会有点笨拙。但通常情况下,任何想要回答你的问题的人只需要一点现实世界的数据样本,就可以考虑你的数据结构。

有两种方法可以处理更大的数据帧:

  1. 运行df.head(20).to_dict()仅包含第一个20 rows,并且

  2. 使用例如更改字典的格式df.to_dict('split')(除此之外还有其他选项'split')将您的输出重塑为需要更少行的字典。

下面是使用iris数据集的一个例子,以及 plotly express 中可用的其他地方。

如果你只是运行:

import plotly.express as px
import pandas as pd
df = px.data.iris()
df.to_dict()

这将产生近 1000 行的输出,并且作为可重现的样本不太实用。但是如果你包括.head(25),你将得到:

{'sepal_length': {0: 5.1, 1: 4.9, 2: 4.7, 3: 4.6, 4: 5.0, 5: 5.4, 6: 4.6, 7: 5.0, 8: 4.4, 9: 4.9},
 'sepal_width': {0: 3.5, 1: 3.0, 2: 3.2, 3: 3.1, 4: 3.6, 5: 3.9, 6: 3.4, 7: 3.4, 8: 2.9, 9: 3.1},
 'petal_length': {0: 1.4, 1: 1.4, 2: 1.3, 3: 1.5, 4: 1.4, 5: 1.7, 6: 1.4, 7: 1.5, 8: 1.4, 9: 1.5},
 'petal_width': {0: 0.2, 1: 0.2, 2: 0.2, 3: 0.2, 4: 0.2, 5: 0.4, 6: 0.3, 7: 0.2, 8: 0.2, 9: 0.1},
 'species': {0: 'setosa', 1: 'setosa', 2: 'setosa', 3: 'setosa', 4: 'setosa', 5: 'setosa', 6: 'setosa', 7: 'setosa', 8: 'setosa', 9: 'setosa'},
 'species_id': {0: 1, 1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1, 7: 1, 8: 1, 9: 1}}

现在我们取得了一些进展。但根据数据的结构和内容,这可能无法以令人满意的方式涵盖内容的复杂性。但您可以通过以下方式在更少的行中包含更多数据:to_dict('split')

import plotly.express as px
df = px.data.iris().head(10)
df.to_dict('split')

现在你的输出将如下所示:

{'index': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
 'columns': ['sepal_length',
  'sepal_width',
  'petal_length',
  'petal_width',
  'species',
  'species_id'],
 'data': [[5.1, 3.5, 1.4, 0.2, 'setosa', 1],
  [4.9, 3.0, 1.4, 0.2, 'setosa', 1],
  [4.7, 3.2, 1.3, 0.2, 'setosa', 1],
  [4.6, 3.1, 1.5, 0.2, 'setosa', 1],
  [5.0, 3.6, 1.4, 0.2, 'setosa', 1],
  [5.4, 3.9, 1.7, 0.4, 'setosa', 1],
  [4.6, 3.4, 1.4, 0.3, 'setosa', 1],
  [5.0, 3.4, 1.5, 0.2, 'setosa', 1],
  [4.4, 2.9, 1.4, 0.2, 'setosa', 1],
  [4.9, 3.1, 1.5, 0.1, 'setosa', 1]]}

现在,您可以轻松增加 中的数字,.head(10)而不会让您的问题过于混乱。但有一个小缺点。现在您不能再直接使用 中的输入pd.DataFrame。但如果您包含一些与 相关的规范,那么index, column, and data您就没问题了。因此,对于这个特定的数据集,我首选的方法是:

import pandas as pd
import plotly.express as px

sample = {'index': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14],
             'columns': ['sepal_length',
              'sepal_width',
              'petal_length',
              'petal_width',
              'species',
              'species_id'],
             'data': [[5.1, 3.5, 1.4, 0.2, 'setosa', 1],
              [4.9, 3.0, 1.4, 0.2, 'setosa', 1],
              [4.7, 3.2, 1.3, 0.2, 'setosa', 1],
              [4.6, 3.1, 1.5, 0.2, 'setosa', 1],
              [5.0, 3.6, 1.4, 0.2, 'setosa', 1],
              [5.4, 3.9, 1.7, 0.4, 'setosa', 1],
              [4.6, 3.4, 1.4, 0.3, 'setosa', 1],
              [5.0, 3.4, 1.5, 0.2, 'setosa', 1],
              [4.4, 2.9, 1.4, 0.2, 'setosa', 1],
              [4.9, 3.1, 1.5, 0.1, 'setosa', 1],
              [5.4, 3.7, 1.5, 0.2, 'setosa', 1],
              [4.8, 3.4, 1.6, 0.2, 'setosa', 1],
              [4.8, 3.0, 1.4, 0.1, 'setosa', 1],
              [4.3, 3.0, 1.1, 0.1, 'setosa', 1],
              [5.8, 4.0, 1.2, 0.2, 'setosa', 1]]}

df = pd.DataFrame(index=sample['index'], columns=sample['columns'], data=sample['data'])
df

现在您可以使用这个数据框了:

    sepal_length  sepal_width  petal_length  petal_width species  species_id
0            5.1          3.5           1.4          0.2  setosa           1
1            4.9          3.0           1.4          0.2  setosa           1
2            4.7          3.2           1.3          0.2  setosa           1
3            4.6          3.1           1.5          0.2  setosa           1
4            5.0          3.6           1.4          0.2  setosa           1
5            5.4          3.9           1.7          0.4  setosa           1
6            4.6          3.4           1.4          0.3  setosa           1
7            5.0          3.4           1.5          0.2  setosa           1
8            4.4          2.9           1.4          0.2  setosa           1
9            4.9          3.1           1.5          0.1  setosa           1
10           5.4          3.7           1.5          0.2  setosa           1
11           4.8          3.4           1.6          0.2  setosa           1
12           4.8          3.0           1.4          0.1  setosa           1
13           4.3          3.0           1.1          0.1  setosa           1
14           5.8          4.0           1.2          0.2  setosa           1

这将大大增加您获得有用答案的机会!

编辑:

df_to_dict()将无法读取时间戳,除非1: Timestamp('2020-01-02 00:00:00')同时包括from pandas import Timestamp

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用