Python 使用基于条件的值替换数据帧中列片段中的值
我有一个大数据框,希望根据条件替换列子集中的一些值 具体地说,我想在第9列右侧的每一列中将大于1的值替换为1 由于dataframe非常大,并且随着时间的推移行数和列数都在增长,因此我无法手动指定要在其中更改值的列的名称。相反,我只需要指定检查第10列及更大列的值是否大于1 在查看了许多不同的堆栈溢出帖子和Pandas文档后,我尝试: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 及
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 aboutdf[df.loc[:,df.columns[10:]>1]=1
?请检查df
的类型,即type(df)
它应该是pandas.core.frame.DataFrame
。我猜你已经用一个整数值覆盖了变量df。啊,是的,我不小心重写了它。当我修复了这个问题并从您的第一条注释运行代码时,我现在得到了错误“不能在具有非np.nan值的混合类型上进行内置布尔设置”。这是因为我的前9列是字符串和int的混合,这是关于数据帧我无法更改的@ShubhamSharma你有什么建议吗?我不想为了解决这个问题而搞砸堆叠。你能解释一下这些选项都在做什么吗?我对clip或lambda不熟悉。@jmrpink请给我一分钟时间添加解释。