如何制作好可复制的熊猫示例

这个问题's的答案是社区的努力。编辑现有答案以改进此帖子。它目前不接受新的答案或互动。

在花了相当长的时间观看了r和pandas标签之后,我得到的印象是pandas问题不太可能包含可复制的数据。这是R社区非常乐于鼓励的事情,多亏了这样的指南,新来者能够获得一些帮助来组合这些例子。能够阅读这些指南并带回可复制数据的人通常会更幸运地得到问题的答案

我们如何才能为pandas问题创建良好的重复性示例?可以将简单的数据帧放在一起,例如:

将熊猫作为pd导入
df=pd.DataFrame({'user':['Bob','Jane','Alice'],
“收入”:[40000,50000,42000]})

但许多示例数据集需要更复杂的结构,例如:

  • datetime索引或数据
  • 多个分类变量(是否有一个等价于R的expand.grid()函数,它生成某些给定变量的所有可能组合?)
  • 多索引或面板数据

对于难以使用几行代码进行模拟的数据集,是否有一个与R的dput()等效的方法,允许您生成可复制粘贴的代码以重新生成数据结构

注意:这里的想法对于堆栈溢出非常通用,实际上是一些问题。

免责声明:写一个好问题很难

好人:

  • 包括小*示例数据帧,作为可运行代码:

    [1]on

    :df=pd.DataFrame([[1,2],[1,3],[4,6]],columns=['A','B'])
    

    或者让它成为;“可复制和粘贴”;使用pd.read\u剪贴板(sep='\s\s+'),您可以设置堆栈溢出突出显示的文本格式,并使用Ctrl+K(或在每行前面加四个空格),或在代码上方和下方加上三个反勾(““`),使代码不凹陷:

    [2]on

    :df
    Output[2]:
    A B
    0  1  2
    1  1  3
    2  4  6
    

    测试pd.自己阅读剪贴板(sep='\s\s+)

    *我真的是说小的,绝大多数示例数据帧可能少于6行引用所需的,并且我打赌我可以在5行中完成。你能用df=df.head()重现错误吗?如果没有,请四处摆弄,看看是否可以组成一个小数据框来展示您所面临的问题。

    *每个规则都有一个例外,最明显的一个例外是性能问题(在这种情况下,一定要使用%timeit和可能的%prun),您应该在这里生成(考虑使用np.random.seed,这样我们就有了完全相同的帧):df=pd.DataFrame(np.random.randn(100000000,10))。说:”;让这段代码对我来说很快”;不是严格意义上的站点主题…

  • 写出你想要的结果(类似于上面)

    [3]on

    :我希望
    Output[3]:
    A B
    0  1  5
    1  4  6
    

    解释数字的来源:5是A为1的行的B列的总和。

  • 务必显示您尝试过的代码:

    [4]on

    :df.groupby('A').sum()
    Output[4]:
    B
    A.
    1  5
    4  6
    

    但是说什么是不正确的:A列在索引中而不是列中。

  • 请说明您已经做了一些研究(搜索文档、搜索堆栈溢出),并给出总结:

    sum的docstring仅表示“0”;计算组值之和“

    groupby文档没有给出这方面的任何示例

    旁白:这里的答案是使用df.groupby('A',as_index=False).sum()

  • 如果您有时间戳列(例如,您正在重新采样或做其他事情)是相关的,那么请明确地对它们应用pd.\u datetime,以便更好地测量**

    df['date']=pd.to_datetime(df['date'])#此列应为日期。。
    

    **有时这就是问题本身:它们是字符串。

坏消息:

  • 不要包含我们无法复制和粘贴的多索引(见上文)。这是对熊猫默认显示的一种不满,但仍然令人恼火:

    [11]on

    :df
    Output[11]:
    C
    A B
    1 2  3
    2  6
    

    正确的方法是使用set\u索引call:

    [12]on

    :df=pd.DataFrame([[1,2,3],[1,2,6]],columns=['A','B','C'])。设置索引(['A','B'])
    In[13]:df
    Output[13]:
    C
    A B
    1 2  3
    2  6
    
  • 在给出您想要的结果时,一定要深入了解它是什么:

    B
    A.
    1  1
    5  0
    

    具体说明你是如何得到这些数字的(它们是什么)。。。仔细检查它们是否正确。

  • 如果您的代码抛出错误,一定要包含整个堆栈跟踪(如果太嘈杂,可以稍后编辑)。显示行号(以及与之相对应的代码行)

丑八怪:

  • 不要链接到我们无法访问的CSV文件(最好不要链接到外部源…)

    df=pd.read_csv('my_secret_file.csv')#理想情况下具有大量解析选项
    

    大多数数据都是专有的我们得到了这样一个结论:制作类似的数据,看看你是否能重现问题(一些小问题)。

  • 不要用语言含糊不清地解释情况,就像你有一个数据框,它是;大号;,顺便提及一些列名(确保不要提及它们的数据类型)。试着去了解一些完全没有意义的细节,而不去了解实际的情况。想必没有人会读到这一段的结尾

    文章不好,举个小例子比较容易。

  • 在开始实际问题之前,不要包含10+(100+?)行数据

    求你了,我们在日常工作中看到的已经够多了。我们想帮忙,但不是像这样
    剪掉简介,只在步骤中显示给您带来麻烦的相关数据帧(或其小版本)。

无论如何,学习Python、NumPy和Pandas都很有趣

发表评论