用基于条件的值替换 pandas 数据框中列的一部分中的值
Replace values in a slice of columns in a pandas dataframe with a value based on a condition
我有一个很大的 Pandas 数据框,我想根据条件替换列子集中的一些值。
具体来说,我想将第 9 列右侧每列中大于 1 的值替换为 1。
因为数据帧太大,并且随着时间的推移,行数和列数都在增加,所以我无法手动指定要更改值的列的名称。相反,我只需要指定第 10 列和更大的列应该检查值 > 1.
在查看了许多不同的 Stack Overflow 帖子和 Pandas 文档之后,我尝试了:
df.iloc[df[:,10: ] > 1] = 1
但是,这给了我错误“无法散列的类型:‘slice’”。
然后我尝试了:
df[df.iloc[:, 10:] > 1] = 1
和
df[df.loc[:, df.columns[10:]] > 1] = 1
根据评论中的 2 条建议,但这两条都给我错误“无法对具有非 np.nan 值的混合类型进行就地布尔设置”。
有谁知道我为什么会收到这些错误and/or我应该对我的代码进行哪些更改以避免这些错误?
谢谢!
1。 DataFrame.where
我们可以使用 iloc
到 select 9th
列右侧的所有列,然后使用 where
我们可以替换数据帧切片中的值其中条件 x.le(1)
是 False
.
df.iloc[:, 10:] = df.iloc[:, 10:].where(lambda x: x.le(1), 1)
2。 DataFrame.clip
或者我们可以使用 clip
,我们可以将 upper
限制定义为 1
,它将数据帧切片中所有大于 1
的值分配给 1
.
df.iloc[:, 10:] = df.iloc[:, 10:].clip(upper=1)
我有一个很大的 Pandas 数据框,我想根据条件替换列子集中的一些值。
具体来说,我想将第 9 列右侧每列中大于 1 的值替换为 1。
因为数据帧太大,并且随着时间的推移,行数和列数都在增加,所以我无法手动指定要更改值的列的名称。相反,我只需要指定第 10 列和更大的列应该检查值 > 1.
在查看了许多不同的 Stack Overflow 帖子和 Pandas 文档之后,我尝试了:
df.iloc[df[:,10: ] > 1] = 1
但是,这给了我错误“无法散列的类型:‘slice’”。
然后我尝试了:
df[df.iloc[:, 10:] > 1] = 1
和
df[df.loc[:, df.columns[10:]] > 1] = 1
根据评论中的 2 条建议,但这两条都给我错误“无法对具有非 np.nan 值的混合类型进行就地布尔设置”。
有谁知道我为什么会收到这些错误and/or我应该对我的代码进行哪些更改以避免这些错误?
谢谢!
1。 DataFrame.where
我们可以使用 iloc
到 select 9th
列右侧的所有列,然后使用 where
我们可以替换数据帧切片中的值其中条件 x.le(1)
是 False
.
df.iloc[:, 10:] = df.iloc[:, 10:].where(lambda x: x.le(1), 1)
2。 DataFrame.clip
或者我们可以使用 clip
,我们可以将 upper
限制定义为 1
,它将数据帧切片中所有大于 1
的值分配给 1
.
df.iloc[:, 10:] = df.iloc[:, 10:].clip(upper=1)