2015-06-22 288 views
2

(熊貓0.16.1,2.7.8的Python 2.1.0蟒蛇(64位),英特爾至強3.07GHz,Win7的64位)蟒蛇大熊貓read_csv如何加快處理時間戳

我有一個CSV表報價數據。每天約40萬行。

sym   time     bid  ask  bsize asize 
[email protected] 2014.05.07T08:10:02.407 1.3927 1.3928 28 29 
[email protected] 2014.05.07T08:10:02.430 1.3927 1.3928 27 29 

要與熊貓閱讀此成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

我的速度慢了多少t與'parse_dates'?我不認爲cython真的會在這裏幫助(或者不值得努力,但我可能是錯的)。你也可以像文本一樣閱讀文本,然後轉換爲日期時間。 – JohnE

+0

@JohnE這是40秒,parse_dates讀取400k行。以字符串形式讀取並稍後解析需要大致相同的時間 - 解析速度很慢。 – jf328

回答

4

這是一個更好的選擇

以你的2線&使其400K,閱讀他們在W/O解析爲日期

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 
+0

啊謝謝。沒有注意到日期部分不是ISO格式 – jf328

+0

添加format參數對解析時間有巨大影響,因爲我使用date_time作爲%d /%m /%Y%H:%M:%S。 – Rodrigo