如何加快pandas read_csv?

时间:2015-11-20 16:21:46

标签: parsing csv pandas

我目前使用以下内容解析文本文件:

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

谢谢,

1 个答案:

答案 0 :(得分:3)

您应该能够通过手动使用foreach ($_SESSION['product_name'] as $eachProductName){ echo $eachProductName; } 而不是使用lambda函数来加快速度:

to_datetime

VS

>>> %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 ,因为在这种情况下,这种情况往往会更快。)