【问题标题】:Chaging type of really large columns - Python MemoryError更改非常大的列的类型 - Python MemoryError
【发布时间】:2021-07-24 02:11:41
【问题描述】:

我们正在从 SAS 迁移到 Python,但在处理大型数据帧时遇到了一些麻烦。

我正在处理一个有 15kk 行和 44 列的 df,一个相当大的男孩。我需要在某些列中用点替换逗号,删除一些其他列并将一些更改为日期。

要删除,我发现这很好用:

del df['column']

但是当尝试使用这个替换时:

df["column"] = (dfl["column"].replace('\.','', regex=True).replace(',','.', regex=True).astype(float))

我明白了:

MemoryError: Unable to allocate 14.2 MiB for an array with shape (14901054,) and data type uint8

尝试使用此转换为日期时也会发生同样的情况:

df['column'] =  pd.to_datetime(df['column'],errors='coerce')

我明白了:

MemoryError: Unable to allocate 114. MiB for an array with shape (14901054,) and data type datetime64[ns]

有没有其他方法可以做这些事情,只是更节省内存?还是事先拆分 df 的唯一解决方案?谢谢!

ps。不是所有的专栏都给我这个问题,但我想这并不重要

【问题讨论】:

    标签: python date replace large-data memory-efficient


    【解决方案1】:

    我不是这个库的专家,但是当您必须处理大量数据时,您可以将信息存储在磁盘中并以块的形式读取。

    一个好的(但我猜不是最好的)解决方案可以将它存储在一个临时 CSV 文件中,然后分块读取文件,处理内存中的更少行。

    1. 原始数据框
    2. 删除不必要的列
    3. 将数据帧存储在临时 CSV 文件中。
    4. 分块读取 CSV:
    5. 对于每个块,执行列修改并将其存储在另一个最终的 CSV 文件中。

    更多信息在这里(谷歌搜索几分钟):

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-22
      • 2017-10-18
      • 2017-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-18
      • 2019-01-18
      相关资源
      最近更新 更多