Python 熊猫中的记忆高效过滤

Python 熊猫中的记忆高效过滤,python,pandas,Python,Pandas,我使用以下代码从一个相当大的数据帧中删除行 试试看: df=df[~df['Full'].str.contains(myregex,regex=True,case=False)] 返回df 但是,任务管理器并没有在每次迭代时减小内存中数据帧的大小(每次都会删除大量数据),而是显示了内存利用率的提高 在开始过滤之前,python使用~4GB内存,但在第22次过滤事件之后,它使用~22GB内存 是否有一种方法可以更有效地从数据帧中删除匹配项 编辑:我使用regex和contains。我无法更改此设

我使用以下代码从一个相当大的数据帧中删除行

试试看:
df=df[~df['Full'].str.contains(myregex,regex=True,case=False)]
返回df
但是,任务管理器并没有在每次迭代时减小内存中数据帧的大小(每次都会删除大量数据),而是显示了内存利用率的提高

在开始过滤之前,python使用~4GB内存,但在第22次过滤事件之后,它使用~22GB内存

是否有一种方法可以更有效地从数据帧中删除匹配项


编辑:我使用regex和contains。我无法更改此设置

为什么使用:try and return

接着是这篇文章:


文章中还介绍了过滤数据帧的其他方法。

为什么使用:try and return

接着是这篇文章:


文章中还介绍了过滤数据帧的其他方法。

您可以尝试在每次过滤事件后调用
gc.collect()
。 通常,在一定数量的分配和取消分配后会触发收集。但是,如果您只执行少量的大规模取消分配,您可能希望手动触发它

Python本身似乎没有将内存释放回操作系统。但是
numpy
(熊猫
pandas
的基础)确实如此

还要检查代码的其余部分,以确定您没有在其他地方保留对原始数据帧或其列的引用。
Python只会在对象的引用计数达到0时取消分配对象。

您可以在每个筛选事件之后尝试调用
gc.collect()
。 通常,在一定数量的分配和取消分配后会触发收集。但是,如果您只执行少量的大规模取消分配,您可能希望手动触发它

Python本身似乎没有将内存释放回操作系统。但是
numpy
(熊猫
pandas
的基础)确实如此

还要检查代码的其余部分,以确定您没有在其他地方保留对原始数据帧或其列的引用。
Python只会在对象的引用计数达到0时取消分配对象。

因为我在函数中使用了它,并在之前对正则表达式进行了一些检查。另外,请注意在我的帖子中使用了
regex=True
,因为我在函数中使用了它,并在之前对regex进行了一些检查。另外,请注意在我的帖子中使用了
regex=True
,您也可以尝试分块处理文件,例如。只需累积所需的数据并丢弃所有其他内容。您也可以尝试将文件分块处理,例如。只需积累所需的数据,然后丢弃所有其他数据
df = df[~df['Full'].str.contains(mystr)]