我们正在从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文件中,然后他们分块读取文件,处理内存中较少的行。
- 原始数据帧
- 删除不必要的列
- 将数据帧存储在临时CSV文件中
- 按块读取CSV:
- 对于每个区块,执行列修改并将其存储在另一个最终CSV文件中
更多信息在这里(几分钟谷歌搜索(:
- 为什么以及如何使用大数据的熊猫
- 处理大熊猫的大型数据集