Pandas 打开一行6M值的csv时速度非常慢

Pandas 打开一行6M值的csv时速度非常慢,pandas,csv,Pandas,Csv,嗨,我有一个文件,在一行上有大约6M个逗号分隔的值 我正在努力 import pandas as pd v = pd.read_csv(file_name, nrows=1, skiprows=3, header=None, verbose=True, dtype=np.float32) 当文件 Name Tue Nov 6 13:52:15 2018 Description 52.2269,52.2148,52.246,52.361,52.5263,52.7399,52.9738

嗨,我有一个文件,在一行上有大约6M个逗号分隔的值

我正在努力

import pandas as pd
v = pd.read_csv(file_name,
    nrows=1, skiprows=3, header=None, verbose=True, dtype=np.float32)
当文件

Name
Tue Nov  6 13:52:15 2018 
Description
52.2269,52.2148,52.246,52.361,52.5263,52.7399,52.9738,53.1952,...45.4,
我得到输出

标记化时间:0.00毫秒

类型转换时间:53023.43毫秒

分析器内存清理时间:212.13毫秒

五、小结

1 rows × 6316057 columns

文件读取时间比预期要长得多,我认为这可能是因为数据在一行中。我可以做些什么来加速它,或者我需要一个不同的库吗?

对于我下面的计时,一些虚拟数据:

data = np.random.randn(1_000_000)    
with open('tmp', 'wt') as f:
    f.write('dummy\n')
    f.write('dummy\n')
    f.write('dummy\n')
    for val in data:
        f.write(str(val) + ',')
    f.write('\n')
通常,pandas解析器针对“长”数据情况进行了优化,而不是像这样的一个非常宽的行。您可以对数据进行预处理,将分隔符转换为换行符,在我的示例中,这大约快了40倍

def parse_wide_to_long(f):
    from io import StringIO
    data = open(f).read().splitlines()[-1]
    data = data.replace(',', '\n')
    return pd.read_csv(StringIO(data), header=None)


In [33]: %timeit pd.read_csv('tmp', nrows=1, skiprows=3, header=None, dtype=np.float32)
20.6 s ± 2.04 s per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [39]: %timeit parse_wide_to_long('tmp')
484 ms ± 35.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

非常感谢你,这正是我所怀疑的。我在pandas中也找不到该选项,因此感谢您提供IO代码!