【发布时间】:2022-01-10 18:20:51
【问题描述】:
我有一组不错的数据(37509、166)。我目前正在尝试根据一组条件替换几列中的 0 。在更改该值之前,我继续收到内存错误,现在我的内核不断崩溃。我的问题是,有没有更好的方法来编写避免内存问题的代码?
df = pd.read_csv(".csv")
cols = list(df.select_dtypes(include=[np.number]).columns)
mask = (df["column1"] <= 0) & (df["column2"] == 0)
df.loc[mask, df[cols]] = np.nan
用于掩码的两列不包含在 cols 列表中,我一次尝试了 1 列。我每次都遇到 MemoryError 。我已经尝试通过 Terality 运行它,但遇到了同样的问题。
错误是:
MemoryError: 无法为形状为 (37509, 37509) 且数据类型为 float64 的数组分配 10.5 GiB。
以下代码对于列列表或单个列也不起作用(我理解为什么此代码不适用于副本 vs 视图):
df[mask][cols].replace(0, np.nan, inplace=True)
如果有人愿意帮助解释解决方案,甚至只是解释问题,我将不胜感激。
【问题讨论】:
-
df.loc[mask, df[cols]] = np.nan应该是df.loc[mask, cols] = np.nan(列索引器应该只是列名列表,而不是这些列的数据框) -
能否请您提供一些来自您的 df 的示例行?这样,我们可以从样本中生成更大的数据框。
标签: python pandas dataframe memory