Chaging类型的真正大的列-Python MemoryError



我们正在从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。不是所有的专栏都给了我这个问题,但我想这并不重要

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

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

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

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

  • 为什么以及如何使用大数据的熊猫
  • 处理大熊猫的大型数据集

最新更新