我经常迭代存储在csv文件中的金融价格数据。例如,当我的所有分析都与时间相关时,使用pandas datetime对象来子集和组织数据的可访问性。
我的问题是,当我读取一个文件到我的计算机内存,parse_dates
参数提供顶部pandas.read_csv()
和pandas.to_datetime()
是令人难以置信的时间成本。
有没有人知道一个更好的方法来处理时间戳在python中,可以优化运行在许多文件,需要加载到内存?
%timeit pd.read_csv("C:\Users\rgalbo\Desktop\Equity\Data\sp - working data\30min--Adj\AAPL_24.csv",index_col=[0])
10 loops, best of 3: 112 ms per loop
with parse_date = True
%timeit pd.read_csv("C:\Users\rgalbo\Desktop\Equity\Data\sp - working data\30min--Adj\AAPL_24.csv",index_col=[0],parse_dates=True)
1 loops, best of 3: 7.5 s per loop
在测试了几个加载&解析一个csv文件,有13,811,418行,有98个唯一的日期值,我们到达了下面的代码片段,并发现如果我们用预定义的日期格式传递format
参数(在我们的例子中是'%m/%d/%Y'),我们可以用Pandas.0.15.3到达2.52 s
。
def to_date(dates, lookup=False, **args):
if lookup:
return dates.map({v: pd.to_datetime(v, **args) for v in dates.unique()})
return pd.to_datetime(dates, **args)
- 还使用coerce=True(或在以后的版本中使用coarse='raise')来启用日期格式验证,否则错误值将保留为字符串值,并且当在数据框列上执行任何其他日期时间操作时将导致错误