(pandas 0.16.1,Python 2.7.8 Anaconda 2.1.0(64位),Intel Xeon 3.07GHz,Win7 64bit)
我有一个csv报价数据表。每天大约400k行。
sym time bid ask bsize asize
XCME@6EM4 2014.05.07T08:10:02.407 1.3927 1.3928 28 29
XCME@6EM4 2014.05.07T08:10:02.430 1.3927 1.3928 27 29
使用pandas将其读入Python
pd.read_csv("quotes.csv", parse_dates = {'idx':[1]}, index_col = 'idx')
需要大约40秒。
知道这是否可以更快?人们已经建议了Cython解决方案in this post,但我想知道是否存在Python / pandas解决方案?
顺便说一句,下面这个不解析日期,一个错误?
pd.read_csv("quotes.csv", parse_dates = [1])
答案 0 :(得分:4)
这是一个更好的选择
采取你的2线&使它们成为400k,无需解析为日期
In [34]: %timeit read_csv(StringIO(data + data2*200000),sep='\s+')
1 loops, best of 3: 328 ms per loop
In [35]: df = read_csv(StringIO(data + data2*200000),sep='\s+')
解析日期,你需要指定一个格式,因为这不是ISO 8601格式,因此在python空间中解析
In [36]: %timeit pd.to_datetime(x.time,format='%Y.%m.%dT%H:%M:%S.%f')
1 loops, best of 3: 2.43 s per loop
In [37]: df.time = pd.to_datetime(df.time,format='%Y.%m.%dT%H:%M:%S.%f')
In [38]: df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 400000 entries, 0 to 399999
Data columns (total 6 columns):
sym 400000 non-null object
time 400000 non-null datetime64[ns]
bid 400000 non-null float64
ask 400000 non-null float64
bsize 400000 non-null int64
asize 400000 non-null int64
dtypes: datetime64[ns](1), float64(2), int64(2), object(1)
memory usage: 21.4+ MB