繁体   English   中英

增加单行pandas read_csv的速度

[英]Increase speed of pandas read_csv for single row

我正在提供具有相当严格的延迟要求的API请求,并且我想要转换的数据一次发布一行。 我很困惑地看到pandas read_csv方法需要大约2ms,我不能放弃只是为了加载数据。

以下代码是否可以进一步改进,例如我遗漏的一个参数,这会加快这个数据量的速度?

from io import StringIO
import pandas as pd
import numpy as np

example_input = '1969,EH10,consumer'

我能找到的具有最佳优化的pandas库方法具有以下参数:

%%timeit
s = StringIO(example_input)
df = pd.read_csv(s,
                 sep=',',
                 header=None,
                 engine='c',
                 names=['dob', 'postcode', 'contract'],
                 dtype=str,
                 compression=None,
                 na_filter=False,
                 low_memory=False)

1.75 ms ± 18.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)本地返回1.75 ms ± 18.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

我能够通过numpy获得相当大的加速加载,然后创建一个数据帧:

%%timeit
s = StringIO(example_input)
a = np.genfromtxt(s, delimiter=',', dtype=str)
df = pd.DataFrame(a.reshape(1, -1),
                  columns=['dob', 'postcode', 'contract'])

415 µs ± 10.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)给出415 µs ± 10.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each) ,这对我的应用来说更容易接受。 (加载到一个numpy阵列可以在~70.4μs内完成,无需加载到数据帧中,所以我可能最终使用它)

但是,是否有可能进一步加快pd.read_csv示例,如果没有 - 任何人都可以帮助我理解大三角洲背后的原因吗?

通常我们看到pd.read_csvgenfromtxt快。 但显然它有一个启动时间,在这一行案例中占主导地位。

In [95]: example_input = '1969,EH10,consumer'                                
In [96]: np.genfromtxt([example_input], delimiter=',',dtype=str)             
Out[96]: array(['1969', 'EH10', 'consumer'], dtype='<U8')

但为什么不拆分字符串并从中创建一个数组? 它更直接,更快捷:

In [97]: np.array(example_input.split(','))                                  
Out[97]: array(['1969', 'EH10', 'consumer'], dtype='<U8')

从此数组中生成数据帧需要更长时间。

In [106]: timeit np.array(example_input.split(','))                          
2.89 µs ± 50.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
In [107]: timeit pd.DataFrame(np.array(example_input.split(','))[None,:], col
     ...: umns=['dob', 'postcode', 'contract'])                              
406 µs ± 6.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM