只是想知道是否有办法提高将大型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'})
答案 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()
至关重要的是,直到最后一行才计算出重要的内容。