gpt4 book ai didi

python - Pandas:如何使用 df.to_dict() 轻松共享示例数据框?

转载 作者:行者123 更新时间:2023-12-03 15:01:21 26 4
gpt4 key购买 nike

尽管在 How do I ask a good question? 上有明确的指导和 How to create a Minimal, Reproducible Example ,许多人似乎只是忽略了在他们的问题中包含可重复的数据样本。那么当一个简单的 pd.DataFrame(np.random.random(size=(5, 5)))是不足够的?例如,您如何使用 df.to_dict()并在问题中包含输出?

最佳答案

答案:
在许多情况下,使用 df.to_dict() 的方法可以完美地完成工作!这里有两个想到的案例:
案例 1: 您已经从本地源用 Python 构建或加载了一个数据框
案例 2: 您在另一个应用程序(如 Excel)中有一个表

细节:
案例 1: 您已经从本地源构建或加载了一个数据框
鉴于您有一个名为 df 的 Pandas 数据框,只需

  • 在控制台或编辑器中运行 df.to_dict()
  • 复制格式化为字典的输出,
  • 将内容粘贴到 pd.DataFrame(<output>) 并将该 block 包含在您现在可重现的代码片段中。

  • 案例 2: 您在另一个应用程序(如 Excel)中有一个表
    根据来源和分隔符,如 (',', ';' '\\s+') 后者表示任何空格,您可以简单地:
  • Ctrl+C 内容
  • 在控制台或编辑器中运行 df=pd.read_clipboard(sep='\\s+')
  • 运行 df.to_dict()
  • 包括输出 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}})
    当然,对于较大的数据帧,这会有点笨拙。但很多时候,所有试图回答您问题的人都需要您的真实世界数据的一小部分样本,以考虑您的数据结构。
    有两种方法可以处理更大的数据帧:
  • 运行 df.head(20).to_dict() 只包括第一个 20 rows
  • 使用例如 df.to_dict('split') (除了 'split' 之外还有 other options )更改您的字典的格式,以将您的输出 reshape 为需要更少行的字典。

  • 这是一个使用 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 这样的时间戳

    关于python - Pandas:如何使用 df.to_dict() 轻松共享示例数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63163251/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com