【发布时间】:2019-11-01 19:54:23
【问题描述】:
我正在尝试使用 pandas pd.read_csv("file.txt",sep="\t") 将一个大的 tab/txt(大小 = 3 gb)文件导入 Python。我加载的文件是一个“.tab”文件,我将扩展名更改为“.txt”以使用read_csv() 导入它。这是一个包含 305 列和 +/- 1 000 000 行的文件。
当我执行代码时,一段时间后 Python 返回一个 MemoryError。我搜索了一些信息,这基本上意味着没有足够的 RAM 可用。当我在 read_csv() 中指定 nrows = 20 时,它工作正常。
我使用的计算机有 46gb 的 RAM,其中大约 20gb 可用于 Python。
我的问题:如何使用 pandas read_csv() 将 3gb 的文件需要超过 20gb 的 RAM 导入 Python?我做错什么了吗?
编辑:在执行df.dtypes 时,类型是object、float64 和int64 的混合类型
更新:我使用以下代码来解决问题并执行我的计算:
summed_cols=pd.DataFrame(columns=["sample","read sum"])
while x<352:
x=x+1
sample_col=pd.read_csv("file.txt",sep="\t",usecols=[x])
summed_cols=summed_cols.append(pd.DataFrame({"sample":[sample_col.columns[0]],"read sum":sum(sample_col[sample_col.columns[0]])}))
del sample_col
它现在选择一列,执行计算,将结果存储在数据框中,删除当前列,然后移动到下一列
【问题讨论】:
-
感谢您的链接!搜索信息时没有弹出这个!
-
一种可能的解决方案是分块读取文件。见this other question。
-
@AlCorreia 我也考虑过该解决方案,但由于我必须计算整个列的总和,因此加载行块似乎不是一个好的解决方案。遍历列(请参阅我的更新)效果很好。