pandas - MemoryError : Unable to allocate 11. 0 GiB,形状为 (120, 12300000) 且数据类型为对象的数组

标签 pandas dataframe

我正在尝试读取 pandas 中的 40GB 文件并对其执行一些操作。 我正在使用 block ,但出现 MemoryError。 (系统RAM = 32 GB)

代码

df = pd.DataFrame()
for chunk in pd.read_csv('file.csv',low_memory = False, chunksize = 50000):
    df = df.append(chunk)

我的代码应该如何读取大文件?

最佳答案

“DataFrame 的大小不能大于机器的 RAM。”

https://tomaugspurger.github.io/modern-8-scaling.html

如果您将 40GB 文件读入 32GB RAM,我认为这不起作用。您可以对 block 本身执行操作并将其保存,而不是立即对整个数据集执行操作吗?

顺便说一句,如果您从 block 构建一个 DataFrame,而不是在每次迭代中将每个 block 附加到同一个 DataFrame,那么将它们收集在列表中然后在最后将它们连接起来会更快。否则,Pandas 必须在每次迭代时创建一个新的海量数据框。

dfs = []
for chunk in pd.read_csv('file.csv',low_memory = False, chunksize = 50000):
    dfs.append(chunk)
df = pd.concat(dfs)

关于pandas - MemoryError : Unable to allocate 11. 0 GiB,形状为 (120, 12300000) 且数据类型为对象的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67756455/

相关文章:

r - 如何在满足条件之前和之后选择数据框中的行?

python - Pandas :在两个数据框中找到匹配的行(不使用 `merge` )

python - 在 Python 中用单个值有条件地填充列

python - Pandas pivot_table : cannot achieve correct format

python - 合并具有分层列的两个数据框

python - 检查 pandas 中是否至少有一列包含字符串

python - 使用 Pandas 比较具有不同行值和坐标的两个 Excel 电子表格

python - 使用 iterrows() 时的持久化问题

python - 从 pandas 访问器访问 pandas DataFrame

python - 在 pandas 中填充 DataFrame