我正在尝试在一个33MB的数据帧(CSV格式)上做一个pandas apply函数,速度非常慢。我在试着找出原因。我在一个大得多的数据帧(16gb)上做了一个应用,大约6个小时就完成了。这个函数在一个非常非常小的数据帧上运行,我让它运行了1.5个小时,仍然什么也没有。在
我想找出瓶颈在哪里。我的怀疑是,因为我使用的datareader功能ping雅虎或谷歌财经,这可能是为什么它这么慢。但当我用它来做一些股票的样本时,它似乎是非常即时的。在
有人对此有什么想法吗?或者加快速度的方法?我已经考虑过使用cythong,但是如果瓶颈是ping时间,那就不会太快。或者更好的是,有没有一种方法可以将其矢量化?(我看不出有什么办法,但有些人比我聪明得多:))这是一大堆问题,但基本上我只是在寻找建议,让这项工作更快一些。谢谢!在
另外,如果有人知道如何添加一个应用功能的进度条,这将是一个伟大的额外奖励:)再次感谢!在
data4=pd.read_csv('check2.csv', parse_dates=['dater1','dater2'], infer_datetime_format=True)
def nextweekday(date):
day=date.weekday()
if day==4:
return date+datetime.timedelta(days=3)
if day==5:
return date+datetime.timedelta(days=2)
else:
return date+datetime.timedelta(days=1)
def getquote(tick,date,plus):
date=date+datetime.timedelta(days=plus)
nextday=nextweekday(date)
try:
return DataReader(tick, "yahoo",date, nextday)["Close"]
except:
return "NO"
def apply_days5(row):
return getquote(row['AcquirorTickerSymbol'],row['dater2'],5)
data4['days5']=data4.apply(apply_days5, axis=1)
我不是百分之百确定你要达到什么目的,但有一些想法。在
首先,像这样反复攻击雅虎会增加很多不必要的开销。我可能会这样做,把所有股票数据读入一个数据帧。在
然后,不使用apply,您可以将现有数据与stock df进行合并,如下所示:
^{pr2}$如果您想填充缺少的值,而不是在apply中使用自定义逻辑,那么使用
fillna
会更快相关问题 更多 >
编程相关推荐