使用数据框上的条件替换列中的所有值

Replacing all values in a column with conditions on a dataframe

我有一组不错的数据 (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: Unable to allocate 10.5 GiB for an array with shape (37509, 37509) and data type float64.

对于列列表或单个列,以下代码也不起作用(我理解为什么此代码不适用于复制与视图):

df[mask][cols].replace(0, np.nan, inplace=True)

如果有人愿意帮助解释解决方案,甚至只是解释问题,我将不胜感激。

DataFrame.loc 接受布尔值或标签:

Access a group of rows and columns by label(s) or a boolean array.

目前列索引器是一个完整的数据框df[cols]:

df.loc[mask, df[cols]] = np.nan
#            ^^^^^^^^

而不是 df[cols],只使用 cols 列表:

df.loc[mask, cols] = np.nan
#            ^^^^