【发布时间】:2021-03-10 20:30:31
【问题描述】:
我有一个关于使用 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)
有什么性能差异吗?
【问题讨论】:
-
你测试了吗?两者根本不同,因为一个被过滤,另一个没有。过滤可以删除所有数据的 99% ....
-
如果你将它们添加到一个 pd 中,为什么要分块读取 - 这样做有什么好处吗?以某种方式怀疑它 - 但这只是一种预感。
-
@PatrickArtner 我可以直接导入它,但我只是好奇为什么其他人建议使用
chunksize。 -
如果你有一个 10GB 的 CSV 文件和一台有 8GB 内存的电脑,你不能在你的内存中填满所有的数据。使用 chunksize 可以避免这种情况 - 如果您最终尝试使用 chunksize 将 ALL 加载到您的 ram 中而不对数据进行任何过滤 - 您最终会遇到与不使用它相同的问题:它不适合。但是,如果您过滤数据并说过滤后仅剩下 10GB 文件中的 1GB,使用块将使其变得更平滑,因为您只在数据框中保存那些重要的数据项(小于 1GB)加上额外的 1 兆字节要过滤的原始 csv 数据块。