【发布时间】:2014-07-29 17:17:15
【问题描述】:
我正在尝试在 33 MB 数据帧(CSV 格式)上执行 pandas 应用功能,但速度非常慢。我正在尝试找出原因。我正在对更大的数据帧(16 GB)进行申请,并在大约 6 小时内完成。这个函数在一个小得多的数据帧上运行,我让它运行了 1.5 小时,仍然没有。
我试图找出瓶颈可能在哪里。我的怀疑是,因为我使用的是 ping 雅虎或谷歌金融的数据阅读器功能,这可能是它慢得多的原因。但是,当我用它为几只股票做样本时,它似乎是瞬间完成的。
有人对此有任何想法吗?或者有什么方法让它更快?我已经考虑过对它进行 cythoning,但如果瓶颈是 ping 时间不会加快速度。或者更好的是有没有办法将它矢量化? (我看不到方法,但有些人比我聪明得多 :) )这是很多问题,但基本上我只是在寻找建议以使其运行得更快。谢谢!
PS- 如果有人知道如何在应用功能上添加进度条,那将是一个很好的额外奖励:) 再次感谢!
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)
【问题讨论】:
标签: python pandas vectorization apply datareader