pandas.merge 不可思议的缓慢

4
以下内容很棒:
times1h = pandas.DatetimeIndex(start='2010-01-01', end='2014-01-01', freq='1h')
times10min = pandas.DatetimeIndex(start='2010-01-01', end='2014-01-01', freq='10T')
wind=pandas.DataFrame({'wind':0}, index=times1h)
power=pandas.DataFrame({'power':0}, index=times10min)
%timeit pandas.merge(wind, power, how='inner', left_index=True, right_index=True)

100 loops, best of 3: 5.2 ms per loop

以下内容出现了无法解释的缓慢。我只是使第一个数据框的时间戳不唯一,并将其作为列而不是索引:
times1h = pandas.DatetimeIndex(start='2010-01-01', end='2014-01-01', freq='1h')
times10min = pandas.DatetimeIndex(start='2010-01-01', end='2014-01-01', freq='10T')
wind=pandas.DataFrame({'time':pandas.concat([pandas.Series(times1h),     pandas.Series(times1h)]), 'wind':0})
power=pandas.DataFrame({'power':0}, index=times10min)
%timeit pandas.merge(wind, power, how='inner', left_on='time', right_index=True)

1 loops, best of 3: 16.6 s per loop

为什么速度这么慢?我能做些什么来解决吗?

我正在尝试获取一组(x,y)点以进行功率曲线拟合。

我使用pandas 0.13.1,因为它是WinPython中包含的版本 :)


你需要展示输入帧(或至少是 df.info())。 - Jeff
是的,我在我的更新中提供了df.info()等信息。 也许我需要提供一个完整的示例来运行和演示性能问题。 - Bjarke Ebert
好的,我对问题进行了更抽象的描述 - 并提供了可复制的代码 :-) - Bjarke Ebert
3
这在0.14.1中的速度与顶部的那个差不多。我不太记得问题是什么了。升级可能是最好的选择。 - Jeff
2
如果您正在寻找在Windows上以更多最新软件包运行Python的替代方法,Anaconda是一个不错的选择-https://store.continuum.io/cshop/anaconda/。 - chrisb
显示剩余3条评论
1个回答

0

正如Jeff在问题的评论中发布的那样,解决方案是将pandas从0.13.1升级到0.14.1。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接