python - 用基于条件的值替换熊猫数据框中的列切片中的值
问题描述
我有一个大型 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 值的混合类型进行就地布尔设置”。
有谁知道我为什么会收到这些错误和/或我应该对我的代码进行哪些更改以避免它们?
谢谢!
解决方案
1.DataFrame.where
我们可以使用iloc
选择列右侧的所有9th
列,然后使用我们可以替换条件为where
的数据框切片中的值。x.le(1)
False
df.iloc[:, 10:] = df.iloc[:, 10:].where(lambda x: x.le(1), 1)
2.DataFrame.clip
或者,我们可以使用clip
where 我们可以定义upper
限制1
,将所有大于1
数据帧切片中的值分配给1
.
df.iloc[:, 10:] = df.iloc[:, 10:].clip(upper=1)
推荐阅读
- c++ - 为什么我的 C++ 程序的汇编输出充满了没有汇编代码的 .ascii?
- python - 根据实例变量对对象数组进行排序
- azure-media-services - Azure 媒体服务:媒体/视频无法在 Safari/Edge 浏览器上解密,但在 Chrome 中运行良好
- azure-active-directory - 需要用户登录才能使用 Bot Framework 和 AAD OAuth2
- mongodb - 如何不匹配 MongoDB 内元素子数组中的文档
- r - 尝试合并两个不同长度的数据集(在 R 中使用 Combine()
- typescript - TypeScript 对象属性需要重复定义
- scala - 将包含字符串的列转换为包含 Apache Spark UDF 中的对象列表的列
- javascript - 如何对二维数组进行分组并将其转换为具有键名的对象
- json - 如何在android studio中解析多个json数组