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
你自己看看... :)
我有一个关于读取具有 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
你自己看看... :)