2015-11-20 3 views
2

В настоящее время я разобрать текстовый файл со следующим:Как ускорить работу pandas read_csv?

f = lambda s: datetime.datetime.strptime(s, '%Y-%m-%d-%H-%M-%S') 
dframe = pd.read_csv(
    fname, sep=' ', header=None, 
    names=('A', 'B', 'C', 'D', 'E'), 
    use_unsigned=True, parse_dates=True, index_col=0, date_parser=f) 

который занимает около 5,70 с для одного файла.

Могу ли я ускорить синтаксический анализ даты и времени?

Строка из файла выглядит следующим образом:

2015-04-08-11-23-27 12420.8 12430.3 12527.0 12394.2 A 

Спасибо,

ответ

3

Вы должны быть в состоянии ускорить его немного, используя to_datetime вручную, а не с помощью лямбда-функции:

>>> %time df = pd.read_csv(fname, delim_whitespace=True, header=None, 
      names=('A', 'B', 'C', 'D', 'E'), use_unsigned=True, parse_dates=True, 
      index_col=0, date_parser=f) 
CPU times: user 9.16 s, sys: 39.9 ms, total: 9.2 s 
Wall time: 9.2 s 

против

>>> %time df2 = pd.read_csv(fname, delim_whitespace=True, header=None, names=('A', 'B', 'C', 'D', 'E'), use_unsigned=True, parse_dates=False, index_col=0) 
CPU times: user 416 ms, sys: 20 ms, total: 436 ms 
Wall time: 435 ms 
>>> %time df2.index = pd.to_datetime(df2.index, format="%Y-%m-%d-%H-%M-%S") 
CPU times: user 2.72 s, sys: 4 ms, total: 2.72 s 
Wall time: 2.72 s 
>>> 
>>> df.equals(df2) 
True 
>>> (2.72+0.435)/9.2 
0.3429347826086957 

(я использую delim_whitespace=True, потому что, как правило, скромно быстрее в подобных ситуациях.)

+0

вы, вероятно, означает df2.index = pd.to_datetime (df2.index, формат = "% Y-% m- % d-% H-% M-% S ") ? – MMM

+0

@MMM: urf, да. – DSM

+0

отлично, время снизилось до 1,35s 4 раза быстрее спасибо – MMM

Смежные вопросы