更高效的pandas命令删除Nan行?
我有一个叫做 TI 的数据框(DF)。我想删除那些 BookDate 是 NaN 的行。所以我运行了:
TI = TI.dropna(subset=['#Book_Date'])
当我运行这个命令时,内存却莫名其妙地被占满了(我的机器有 100GB 的内存,TI 占用了大约 50% 的内存,但当我运行那个 dropna 的命令时,内存使用率一下子就到了 100%,而且这个命令一直没法执行完)。这是在创建一个全新的副本吗?TI 有 6400 万行数据,所以我希望能更高效一些。
2 个回答
1
这可以通过使用 query
来实现,但首先需要把列名中的特殊字符 #
去掉。
TI = TI.rename(columns={"#Book_Date": "Book_Date"}) # remove the '#' symbol from column name
TI = TI.query("Book_Date.notnull()") # memory-efficient dropna
1
到目前为止,最好的方法是通过确保这一列的值是有限的来实现这个目标。你需要用到numpy这个库。
from pandas import *
import numpy
TI = TI[np.isfinite(TI['#Book_Date'])]