花了相当多的时间观察SO上的r和pandas标签,我得到的印象是pandas问题不太可能包含可重现的数据.这是值得的R社会一直要鼓励不错,并感谢像导游这样,新人能得到放在一起,这些例子一些帮助.能够阅读这些指南并返回可重现数据的人通常会更好地获得他们问题的答案.
我们如何为pandas问题创建良好的可重复示例?简单的数据帧可以放在一起,例如:
import pandas as pd
df = pd.DataFrame({'user': ['Bob', 'Jane', 'Alice'],
'income': [40000, 50000, 42000]})
Run Code Online (Sandbox Code Playgroud)
但是许多示例数据集需要更复杂的结构,例如:
datetime 指数或数据expand.grid()函数,它会产生某些给定变量的所有可能组合?)对于dput()难以使用几行代码进行模拟的数据集,是否有与R相当的R ,它允许您生成可复制粘贴的代码以重新生成数据结构?
我注意到从熊猫使用iterrows时性能非常差.
这是其他人经历过的事情吗?它是否特定于iterrows,并且对于特定大小的数据(我正在使用2-3百万行),是否应该避免此功能?
关于GitHub的讨论使我相信它是在数据帧中混合dtypes时引起的,但是下面的简单示例表明它甚至在使用一个dtype(float64)时也存在.我的机器需要36秒:
import pandas as pd
import numpy as np
import time
s1 = np.random.randn(2000000)
s2 = np.random.randn(2000000)
dfa = pd.DataFrame({'s1': s1, 's2': s2})
start = time.time()
i=0
for rowindex, row in dfa.iterrows():
i+=1
end = time.time()
print end - start
Run Code Online (Sandbox Code Playgroud)
为什么矢量化操作如此快速应用?我想也必须有一些逐行迭代.
在我的情况下,我无法弄清楚如何不使用iterrows(这将为将来的问题保存).因此,如果您一直能够避免这种迭代,我将不胜感激.我正在基于单独数据帧中的数据进行计算.谢谢!
---编辑:我想要运行的简化版本已添加到下面---
import pandas as pd
import numpy as np
#%% Create the original tables
t1 = {'letter':['a','b'],
'number1':[50,-10]}
t2 = {'letter':['a','a','b','b'],
'number2':[0.2,0.5,0.1,0.4]}
table1 = pd.DataFrame(t1)
table2 = pd.DataFrame(t2)
#%% Create the body of the …Run Code Online (Sandbox Code Playgroud)