python - 解析两个大数据帧时出现内存错误

标签 python pandas

我有两个数据帧,每个数据帧大约 400k 行,称之为 a 和 b。我想要做的是对于 df b 中的每一行,找到数据框 a 中该行的帐号。如果存在,我想从数据帧 a 中删除该行。问题是,当我尝试运行此代码时,我不断收到内存错误。最初我使用 iterrows,但是在处理大型数据集时这似乎很糟糕,所以我改用 apply,但我遇到了同样的错误。下面是我正在尝试的简化伪代码:

def reduceAccount(accountID):
    idx = frameA.loc[frameA["AccountID"] == accountID].index
    frameB.drop(idx, inplace=True)

frameB["AccountID"].apply(reduceAccount)

我什至尝试过一些恶作剧,例如迭代前几百/千行,但在一个循环之后,我仍然遇到内存错误,这让我认为我仍在将内容加载到内存中而不是清除。有没有比我尝试的更好的方法来减少 dataframeA ?请注意,我不想合并帧(还),只是删除数据帧 a 中在数据帧 b 中具有重复键的任何行。

最佳答案

问题是,为了查看要过滤的所有值,您需要在某个时刻将两个 DF 存储在内存中。您可以通过不使用 apply() 来稍微提高效率,它仍然是一个迭代器。以下代码是直接使用 bool 掩码的更高效的矢量化方法。

dfB[~dfB["AccountID"].isin(dfA["AccountID"])]

但是,如果存储是问题所在,那么这可能仍然不起作用。需要考虑的一些方法是对数据进行分块,正如您所说的您已经尝试过的那样,或者 enhancing performance 文档中的一些选项。

关于python - 解析两个大数据帧时出现内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54891872/

相关文章:

python - Pandas :合并(内部连接)数据框的行数比原来的多

Python 请求 SSL 错误 : hostname doesn't mactch either of

python - 当 qcombobox 索引更改覆盖 QUiloader 时,PySide2 在小部件上重新绘制

python - 在 Pandas Dataframe 中使用值为 1 的列创建一个短语列

python - 在 Pandas 数据框中切片字符串并分配一个新列

python - 选择列表/列/数组的每个第 n 个子集

python - 在这个 python 代码中产生 "TypeError character mapping must return integer..."是什么?

Pandas 数据帧 : truncate string fields

python - 如何将月份和年份放在 Python Pandas 的同一列中

python - 如何使用 pandas 和 sqlalchemy 将 VARIANT 或 ARRAY 数据类型插入到 Snowflake 中