python 块大小差异

python chunksize difference

我有一个关于读取具有 chunksize 的大型 csv 文件的问题。
我的问题是:下面这两个有什么区别?

import pandas as pd
chunks = pd.read_csv("large_data.csv", chunksize=1000000)
chunk_list = []  

# Each chunk is in dataframe format
for data_chunk in chunks:  
    filtered_chunk = chunk_filtering(data_chunk)
    chunk_list.append(filtered_chunk)
    
final = pd.concat(chunk_list)
chunks = pd.read_csv("large_data.csv", chunksize=1000000)
final = pd.concat(chunks)

有什么性能差异吗?

当您对效率有疑问时,正如@Patrick Artner 所建议的那样,只需对其进行测试即可:

start = time.perf_counter()
final = pd.read_csv("large_data.csv")
print(time.perf_counter() - start)
start = time.perf_counter()
final = pd.concat(pd.read_csv("large_data.csv", chunksize=1_000_000))
print(time.perf_counter() - start)

或者,如果您使用的是 Jupyter:

%%timeit
final = pd.read_csv("large_data.csv")

但是你的问题的答案是:使用 chunksize 和 concat 显然比直接使用慢。

chunksize 仅当您像处理过滤器一样处理数据时才有用。

这个想法是为了避免您的计算机内存以任何方式超载。

这里再次进行测试:如果您有 16 Gb 的内存,请通过重新创建一个 str 直到您的内存已满。一旦到达那里,您的计算机性能就会急剧下降!

所以我们处理的块足够小,可以在计算机内存限制内进行处理...

在 Jupyter 下:

a = 'a'*1_000_000_000

运行 以下单元格同时查看您的内存使用情况:

a += 'a'*1_000_000_000

你自己看看... :)