首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在pandas数据框中使用正则表达式将所有数字(0和1除外)更改为0

在pandas数据框中使用正则表达式将所有数字(0和1除外)更改为0
EN

Stack Overflow用户
提问于 2017-06-27 05:30:45
回答 2查看 343关注 0票数 1

我会将一列数据框中除1和0之外的任何数字更改为0。这是我的代码。但它不起作用。

代码语言:javascript
复制
df2['AgDg'] = df2['AgDg'].replace(r'\[2-9]\d*', 0, regex=True)

这是数据帧的一个子集:

代码语言:javascript
复制
Index   value 
1        0
2        45
3        135
4        1
5        1

输出应如下所示:这是数据帧的子集:

代码语言:javascript
复制
  Index   value 
    1        0
    2        0
    3        0
    4        1
    5        1
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-27 05:38:46

如果您输入的是数字,则可以对这些值执行map操作,这样1就变成了1,所有其他值都变成了0。为此,我使用了一个lambda (内联)函数:

代码语言:javascript
复制
df2['AgDg'] = df2['AgDg'].map(lambda val:1 if val == 1 else 0)

这会将您的值转换为整数,无论它们是什么数字。否则,您也可以使用注释中的where函数:

代码语言:javascript
复制
df2['AgDg'] = df2['AgDg'].where(df2['AgDg'] == 1, 0)

where()挑选并保留满足需求的元素(即,在本例中等于1 )。第二个参数是将什么值分配给不满足要求的元素(即,将所有其他元素设置为“0”)。

在这种情况下,当我们更新当前数据帧时,也可以“就地”更新,这意味着我们直接更新当前数据,而不是赋值。然后该命令变为:

代码语言:javascript
复制
df2['AgDg'].where(df2['AgDg'] == 1, 0, True)

为了让它更清楚,也可以命名in参数(当使用比最常见的参数更多的参数来提高可读性时,我建议这样做):

代码语言:javascript
复制
df2['AgDg'].where(df2['AgDg'] == 1, other=0, inplace=True)
票数 1
EN

Stack Overflow用户

发布于 2017-06-27 05:52:07

让我们使用maskne。我们在所有非1的值上设置一个掩码:

代码语言:javascript
复制
df.assign(value=df.value.mask(df.value.ne(1),0))

或者像Ted Petrou建议的那样

代码语言:javascript
复制
df.assign(value=df.value.eq(1).mul(1))

输出:

代码语言:javascript
复制
   Index  value
0      1      0
1      2      0
2      3      0
3      4      1
4      5      1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44768998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档