pandas read_csv大文件性能提升

时间:2018-03-09 13:35:29

标签: python pandas dataframe large-files

只是想知道是否有办法提高将大型csv文件读入pandas数据帧的性能。我有3个大的(每个3.5MM记录)管道分隔文件,我想加载到数据帧并执行一些任务。目前我正在使用pandas.read_csv()定义cols,并在参数中有数据类型,如下所示。我确实通过定义列的数据类型看到了一些改进,但加载时仍需要3分钟以上。

import pandas as pd
df = pd.read_csv(file_, index_col=None, usecols = sourceFields, sep='|', header=0, dtype={'date':'str', 'gwTimeUtc':'str', 'asset':'|str', 
'instrumentId':'|str', 'askPrice':'float64', 'bidPrice':'float64', 
'askQuantity':'float64', 'bidQuantity':'float64', 'currency':'|str', 
'venue':'|str', 'owner':'|str', 'status':'|str', 'priceNotation':'|str', 'nominalQuantity':'float64'})

1 个答案:

答案 0 :(得分:1)

根据您对数据的处理方式,一个不错的选择是dask.dataframe。此库可用于内存不足,并允许您懒惰地执行pandas操作的子集。然后,您可以将结果作为pandas数据帧存储在内存中。以下是您可以尝试的示例代码:

import dask.dataframe as dd, pandas as pd

# point to all files beginning with "file"
dask_df = dd.read_csv('file*.csv')

# define your calculations as you would in pandas
dask_df['col2'] = dask_df['col1'] * 2

# compute results & return to pandas
df = dask_df.compute()

至关重要的是,直到最后一行才计算出重要的内容。