Python 使用基于条件的值替换数据帧中列片段中的值

Python 使用基于条件的值替换数据帧中列片段中的值,python,pandas,dataframe,conditional-statements,slice,Python,Pandas,Dataframe,Conditional Statements,Slice,我有一个大数据框,希望根据条件替换列子集中的一些值 具体地说,我想在第9列右侧的每一列中将大于1的值替换为1 由于dataframe非常大,并且随着时间的推移行数和列数都在增长,因此我无法手动指定要在其中更改值的列的名称。相反,我只需要指定检查第10列及更大列的值是否大于1 在查看了许多不同的堆栈溢出帖子和Pandas文档后,我尝试: df.iloc[df[:,10:]>1]=1 然而,这给了我一个错误“不可破坏的类型:'切片'” 然后我试着: df[df.iloc[:,10:]>1]=1 及

我有一个大数据框,希望根据条件替换列子集中的一些值

具体地说,我想在第9列右侧的每一列中将大于1的值替换为1

由于dataframe非常大,并且随着时间的推移行数和列数都在增长,因此我无法手动指定要在其中更改值的列的名称。相反,我只需要指定检查第10列及更大列的值是否大于1

在查看了许多不同的堆栈溢出帖子和Pandas文档后,我尝试:

df.iloc[df[:,10:]>1]=1

然而,这给了我一个错误“不可破坏的类型:'切片'”

然后我试着:

df[df.iloc[:,10:]>1]=1

df[df.loc[:,df.columns[10:]>1]=1

根据评论中的2条建议,但这两条建议都给了我一个错误“不能对具有非np.nan值的混合类型进行就地布尔设置”

有人知道我为什么会出现这些错误和/或我应该修改代码以避免它们吗

谢谢大家!

一,。 我们可以使用
iloc
选择
9th
列右侧的所有列,然后使用
where
替换数据帧切片中条件
x.le(1)
False
的值

df.iloc[:, 10:] = df.iloc[:, 10:].where(lambda x: x.le(1), 1)
2. 或者,我们可以使用
clip
上限定义为
1
,将数据帧切片中大于
1
的所有值分配给
1

df.iloc[:, 10:] = df.iloc[:, 10:].clip(upper=1)

检查df[df.iloc[:,10:]>1]=1
现在我得到错误“'int'对象没有属性'iloc'”@Shubhamsharmawawhat about
df[df.loc[:,df.columns[10:]>1]=1
?请检查
df
的类型,即
type(df)
它应该是
pandas.core.frame.DataFrame
。我猜你已经用一个整数值覆盖了变量df。啊,是的,我不小心重写了它。当我修复了这个问题并从您的第一条注释运行代码时,我现在得到了错误“不能在具有非np.nan值的混合类型上进行内置布尔设置”。这是因为我的前9列是字符串和int的混合,这是关于数据帧我无法更改的@ShubhamSharma你有什么建议吗?我不想为了解决这个问题而搞砸堆叠。你能解释一下这些选项都在做什么吗?我对clip或lambda不熟悉。@jmrpink请给我一分钟时间添加解释。