ves*_*and 12 python pandas plotly
这个问题早些时候被标记为如何制作好的可重复的熊猫示例的副本。对于任何寻求制作此类可重复数据样本的人来说,该贡献无疑应该是首选帖子,而这篇文章旨在阐明一种非常实用且有效的方法,将给定的数据样本包含df.to_dict()
在与df=pd.DataFrame(<dict>)
. How to make good reproducible pandas examples 中的问题和答案都没有明确涵盖这一点。Usingdf.to_dict()
也可以很好df.to_clipboard()
地与 结合使用,在文章How to provide a reproducible copy of your DataFrame with to_clipboard()中进行了简明扼要的介绍
尽管有关于如何提出好问题的清晰简明的指导?以及如何创建最小的、可重现的示例,许多人似乎只是忽略了在他们的问题中包含可重现的数据样本。那么,当简单pd.DataFrame(np.random.random(size=(5, 5)))
还不够时,有什么实用且简单的方法来重现数据样本呢?例如,您如何使用df.to_dict()并将输出包含在问题中?
ves*_*and 18
在许多情况下,使用 with 方法df.to_dict()
可以完美地完成工作!这里有两个案例:
案例 1: 您已经从本地源在 Python 中构建或加载了一个数据帧
案例 2: 您在另一个应用程序(如 Excel)中有一个表
案例 1: 您有一个从本地源构建或加载的数据框
鉴于您有一个名为 的熊猫数据框df
,只需
df.to_dict()
在您的控制台或编辑器中运行,以及pd.DataFrame(<output>)
您现在可重现的代码片段中并将该块包含在内。案例 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}})
Run Code Online (Sandbox Code Playgroud)
当然,对于较大的数据帧,这会变得有点笨拙。但很多时候,所有试图回答您的问题的人都需要一个真实世界数据的小样本,以将您的数据结构考虑在内。
df.head(20).to_dict()
只包括第一个20 rows
,和df.to_dict('split')
(除 外还有其他选项'split'
)更改 dict 的格式,将输出重塑为需要较少行的 dict。这是一个使用iris数据集的示例,以及可从 plotly express 获得的其他地方。
如果你只是运行:
import plotly.express as px
import pandas as pd
df = px.data.iris()
df.to_dict()
Run Code Online (Sandbox Code Playgroud)
这将产生近 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}}
Run Code Online (Sandbox Code Playgroud)
现在我们正在到达某个地方。但取决于数据的结构和内容,这可能无法以令人满意的方式覆盖内容的复杂性。但是您可以通过如下方式在更少的行中包含更多数据:to_dict('split')
import plotly.express as px
df = px.data.iris().head(10)
df.to_dict('split')
Run Code Online (Sandbox Code Playgroud)
现在您的输出将如下所示:
{'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]]}
Run Code Online (Sandbox Code Playgroud)
现在您可以轻松地增加数量,.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
Run Code Online (Sandbox Code Playgroud)
现在,您将使用此数据框:
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
Run Code Online (Sandbox Code Playgroud)
这将显着增加您收到有用答案的机会!
df_to_dict()
将无法读取时间戳,就像1: Timestamp('2020-01-02 00:00:00')
不包括from pandas import Timestamp