如何解决python块大小差异
我有一个关于使用 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
自己看看... :)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。