Python 使用建议读取大型文本文件?

Python 使用建议读取大型文本文件?,python,pandas,Python,Pandas,我正在将一个25GB的大型csv文件读入pandas.DataFrame。我的电脑规格是: 英特尔酷睿i7-8700 3.2GHz RAM 16G 视窗10 DataFrame.shape=144000000行乘以13列 磁盘上的csv文件大小为24GB 读取此文件需要很长时间,有时需要20分钟。在代码方面,有什么建议可以让我做得更好吗 *注意:由于我将与另一个DF连接(合并),因此整体上需要此DF。您可以使用: 或者您可以使用: 查看pd.read\u csv()中的chunksize参数

我正在将一个25GB的大型csv文件读入pandas.DataFrame。我的电脑规格是:

  • 英特尔酷睿i7-8700 3.2GHz
  • RAM 16G
  • 视窗10
  • DataFrame.shape=144000000行乘以13列
  • 磁盘上的csv文件大小为24GB
读取此文件需要很长时间,有时需要20分钟。在代码方面,有什么建议可以让我做得更好吗

*注意:由于我将与另一个DF连接(合并),因此整体上需要此DF。

您可以使用:

或者您可以使用:


查看
pd.read\u csv()
中的
chunksize
参数:您可以尝试按块加载它,如图所示。另外,如果您可以重构逻辑以按块方式处理数据帧,那么您可以按照所示的方式制作一个算法。也许这会有帮助。也许我必须编辑我的问题。这个DF在整体上是需要的,因为我将要加入(合并)另一个DF。如果我使用chunk,我是否一次拥有所有内容?您可以签出。这对于数据大于内存的情况非常好。你应该考虑改变整个设计。当所有的东西都能被记住的时候,熊猫的工作做得很好。但是当数据的大小超过可用内存时,它必须使用某种形式的交换来让数据驻留在磁盘上。在16 Gb的机器上加入25 Gb的数据帧将是非常缓慢的,完全停止。你知道你想做什么,我不知道,所以我无法猜测一个更有效的设计是否可行。如果DF1(100M)想要左连接DF2(144M),并且我每次都将它从DF1分割成10M,那么我必须运行连接10次,每次将10M与144M连接起来。你认为这会改进我的代码吗?在我看来,这就像一次完成100米和144米一样。不?在不看到您正在使用的代码的情况下提供优化建议有点困难。如果merge()需要很长时间,那么分块可能不会加快那么多速度,尽管它可能仍然会加快一些速度。如果CSV的初始读入花费了很长时间,那么您应该注意到通过使用分块技术的显著改进。“dask”库与pandas相比花费的时间更长。我不知道为什么。
import dask.dataframe as dd # import dask.dataframe
df = dd.read_csv('filename.csv') # read csv
def chunk_processing(): # define a function that you will use on chunks
    ## Do Something # your function code here


chunk_list = [] # create an empty list to hold chunks
chunksize = 10 ** 6 # set chunk size
for chunk in pd.read_csv('filename.csv', chunksize=chunksize): # read in csv in chunks of chunksize
    processed_chunk = chunk_processing(chunk) # process the chunks with chunk_processing() function
    chunk_list.append(processed_chunk) # append the chunks to a list
df_concat = pd.concat(chunk_list) # concatenate the list to a dataframe