更高效的pandas命令删除Nan行?

4 投票
2 回答
939 浏览
提问于 2025-05-01 08:47

我有一个叫做 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

参考了 内存高效过滤 `DataFrame` 行

1

到目前为止,最好的方法是通过确保这一列的值是有限的来实现这个目标。你需要用到numpy这个库。

from pandas import *
import numpy

TI = TI[np.isfinite(TI['#Book_Date'])]

撰写回答