花了相当多的时间观看 SO 上的r和pandas标签,我得到的印象是pandas问题不太可能包含可重复的数据。这是 R 社区一直非常鼓励的事情,并且感谢这样的指南,新手能够在整理这些示例时获得一些帮助。能够阅读这些指南并返回可重复数据的人通常会更幸运地获得问题的答案。
pandas
我们如何为pandas问题创建良好的可重复示例?可以将简单的数据框放在一起,例如:
import pandas as pd df = pd.DataFrame({'user': ['Bob', 'Jane', 'Alice'], 'income': [40000, 50000, 42000]})
但是许多示例数据集需要更复杂的结构,例如:
datetime
expand.grid()
对于难以使用几行代码模拟的数据集,是否有与 R 等效的方法dput(),可让您生成可复制粘贴的代码以重新生成数据结构?
dput()
注意:这里的想法来说是非常通用的,确实是 questions。
In [1]: df = pd.DataFrame([[1, 2], [1, 3], [4, 6]], columns=['A', 'B'])
或使用 使其“可复制和可粘贴” pd.read_clipboard(sep='\s\s+'),您可以格式化 Stack Overflow 突出显示的文本并使用Ctrl+ K(或在每行前添加四个空格),或在代码上方和下方放置三个反引号(```),代码不缩进:
pd.read_clipboard(sep='\s\s+')
Ctrl
K
In [2]: df Out[2]: A B 0 1 2 1 1 3 2 4 6
测试pd.read_clipboard(sep='\s\s+')自己。
我真的是说 小 。绝大多数示例 DataFrame 可能少于 6 行[需要引用], 我敢打赌我可以在 5 行中完成。 你能用 重现错误df = df.head()吗?如果没有,请四处寻找是否可以组成一个小型 DataFrame 来展示您所面临的问题。
df = df.head()
每个规则都有一个例外,很明显的一个是针对性能问题( 在这种情况下肯定使用 %timeit 并且可能使用 %prun),您应该在哪里生成:df = pd.DataFrame(np.random.randn(100000000, 10)). 考虑使用np.random.seed所以我们有完全相同的框架。说,“让这个代码对我来说快速”并不是该网站的严格主题。
df = pd.DataFrame(np.random.randn(100000000, 10))
np.random.seed
写出你想要的结果(与上面类似)
In [3]: iwantthis
Out[3]: A B 0 1 5 1 4 6
解释这些数字的来源:5 是 A 为 1 的行的 B 列的总和。
In [4]: df.groupby('A').sum()
Out[4]: B A 1 5 4 6
但是说什么是不正确的:A 列在索引中而不是列中。
sum 的文档字符串只是说明“计算组值的总和” groupby 文档没有为此提供任何示例。
sum 的文档字符串只是说明“计算组值的总和”
groupby 文档没有为此提供任何示例。
旁白:这里的答案是使用df.groupby('A', as_index=False).sum().
df.groupby('A', as_index=False).sum()
pd.to_datetime
df['date'] = pd.to_datetime(df['date']) # this column ought to be date..
** 有时这就是问题本身:它们是字符串。
In [11]: df
Out[11]: C A B 1 2 3 2 6
正确的方法是在调用中包含一个普通的 DataFrameset_index:
set_index
In [12]: df = pd.DataFrame([[1, 2, 3], [1, 2, 6]], columns=['A', 'B', 'C']).set_index(['A', 'B']) In [13]: df Out[13]: C A B 1 2 3 2 6
B
A 1 1 5 0
请具体说明您如何获得这些数字(它们是什么)......仔细检查它们是否正确。
df = pd.read_csv('my_secret_file.csv') # ideally with lots of parsing options
大多数数据是专有的 ,我们得到:组成类似的数据,看看你是否可以重现问题(一些小问题)。
散文不好,用小例子更容易。
拜托,我们在日常工作中看到了足够多的这种情况。 我们想帮忙,但不是这样...... _ _剪掉介绍,在给你带来麻烦的步骤中只显示相关的 DataFrames(或它们的小版本)。