【发布时间】:2021-04-17 22:20:14
【问题描述】:
我需要将 Pandas 中的 4GB 大文件作为 csv 读入数据帧。这是我当前的代码:
source_data_df = pd.read_csv(temp_file, skipinitialspace=True, dtype=str, na_values=['N.A.'])
由于内存不足错误而失败。
我知道我可以使用 chunksize Pandas 选项来降低内存利用率并在保存到磁盘之前以块的形式处理数据。在将其保存到磁盘之前,我无法弄清楚如何使用来自块中的 csv 文件的所有数据创建生成的单个数据帧。我需要帮助完成这段代码来创建这个最终的数据框。有人可以帮忙吗?
chunksize = 10000000
with pd.read_csv(temp_file, skipinitialspace=True, dtype=str, na_values=['N.A.'], chunksize=chunksize) as reader:
for chunk in reader:
process(chunk)
或者,可以将处理过的块附加到磁盘上的单个目标文件中吗?那么上面的代码会是什么样子呢?
另外,需要关于 3 GB 文件的最佳块大小的建议,块大小是否代表块的大小(以字节为单位)?比如说 500 MB 的块是什么意思?
chunksize 的度量单位是什么?我以为是字节,有人可以确认吗?
非常感谢!
【问题讨论】:
-
“在将其保存到磁盘之前,我无法弄清楚如何使用来自块的 csv 文件中的所有数据创建生成的单个数据帧。”所以你想在某个时候将整个数据帧放在内存中?这不会破坏分块加载它的目的吗?如果您没有足够的内存来一次加载所有数据,那么您将没有足够的内存来连接一个数据帧中的所有块。
-
我可以将处理过的块附加到磁盘上的单个目标文件中吗?上面的代码看起来如何?你能帮忙吗?
-
什么样的文件?您已经有一个 CSV 文件。
-
一个新的 CSV 文件。如果可以附加到新的镶木地板文件,那也很高兴!
标签: python python-3.x pandas dataframe