我有一个叫 TI 的 DF。我想删除 BookDate 为 NaN 的行。于是我就跑了:
TI = TI.dropna(subset=['#Book_Date'])
当我运行这个时,内存由于某种原因被耗尽(我在一台 100GB RAM 的机器上,大约 50% 的 RAM 用于保存 TI,当我运行 dropna 行时,它会达到 100%用法并且从未完成执行命令)。它正在制作一个全新的副本吗? TI 是一个 6400 万行数据帧,因此需要更加高效。
到目前为止,最好的方法是通过使用列必须是有限的来做到这一点。为此你需要 numpy。
from pandas import *
import numpy
TI = TI[np.isfinite(TI['#Book_Date'])]
这可以使用
query
来完成,但需要首先从列名称中删除特殊字符 #
。
TI = TI.rename(columns={"#Book_Date": "Book_Date"}) # remove the '#' symbol from column name
TI = TI.query("Book_Date.notnull()") # memory-efficient dropna