python-3.x - 根据条件替换指定列列表中的值
问题描述
实际用例是我想在某些命名列中的所有值小于零时用零替换它们,但不理会其他列。假设在下面的数据框中,我想将列中的所有值降a
为零b
,但不理会列d
。
df = pd.DataFrame({'a': [0, -1, 2], 'b': [-3, 2, 1],
'c': ['foo', 'goo', 'bar'], 'd' : [1,-2,1]})
df
a b c d
0 0 -3 foo 1
1 -1 2 goo -2
2 2 1 bar 1
该问题已接受答案的第二段:如何将 Pandas 数据框中的负数替换为零确实提供了一种解决方法,我可以将列的数据类型设置d
为非数字,然后再将其更改回来:
df['d'] = df['d'].astype(object)
num = df._get_numeric_data()
num[num <0] = 0
df['d'] = df['d'].astype('int64')
df
a b c d
0 0 0 foo 1
1 0 2 goo -2
2 2 1 bar 1
但这看起来真的很乱,这意味着我需要知道我不想更改的列的列表,而不是我想要更改的列表。
有没有办法直接指定列名
解决方案
您可以使用mask
和列过滤:
df[['a','b']] = df[['a','b']].mask(df<0, 0)
df
输出
a b c d
0 0 0 foo 1
1 0 2 goo -2
2 2 1 bar 1
推荐阅读
- android - Crashlytics 仪表板不显示原始异常,而仅显示来自新活动的异常
- ios - 将值附加到数据数组并保存在 Userdefault swift
- arrays - 查询开头的 id 数组中的 Wp_query 项目
- java - 当我在工具栏标题和副标题中加载徽标时不显示
- ruby-on-rails - Rails:对单个字段使用多个复选框
- lua - Lua:垃圾收集器的行为是否随着 Lua 5.3.2 改变?
- java - 如何从firebase中的单个子值获取多个键?
- javascript - html javascript中的无限滚动
- codenameone - IOS wkwebview 不适用于 mailto 链接或 tel 链接
- javascript - 通过 Jest 在 React 中测试 componentDidUpdate 中的 prevProps