使用数据框上的条件替换列中的所有值
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
# ^^^^
我有一组不错的数据 (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
# ^^^^