首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从列中移除两位数元素的更有效方法

从列中移除两位数元素的更有效方法
EN

Stack Overflow用户
提问于 2021-03-15 12:59:47
回答 3查看 32关注 0票数 0

给定的代码:

代码语言:javascript
复制
import pandas as pd
import numpy as np
df=pd.DataFrame({"item":['浙A','京E','12','34','b','c','d']})
df

有桌子

代码语言:javascript
复制
    item
0   浙A
1   京E
2   12
3   34
4   b
5   c
6   d

我想输入两位数作为nan

预期产出:

代码语言:javascript
复制
item    result
0   浙A  浙A
1   京E  京E
2   12  NaN
3   34  NaN
4   b   b
5   c   c
6   d   d

实现这一目标的最简单方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-03-15 13:02:17

如果需要替换,如果有2位数,也可能有另一个值:

代码语言:javascript
复制
df['result'] = df['item'].replace('\d{2}', np.nan, regex=True)

或者,如果需要只执行2位数,而不需要另一个子字符串值:

代码语言:javascript
复制
df['result'] = df['item'].replace('^\d{2}$', np.nan, regex=True)

代码语言:javascript
复制
print (df)
  item result
0   浙A     浙A
1   京E     京E
2   12    NaN
3   34    NaN
4    b      b
5    c      c
6    d      d
票数 2
EN

Stack Overflow用户

发布于 2021-03-15 13:03:51

检查item是否为numeric,其length是否为2使用Series.str.numericSeries.str.len

代码语言:javascript
复制
In [962]: df['result'] = np.where(df.item.str.isnumeric() & df.item.str.len().eq(2), np.nan, df.item)

In [963]: df
Out[963]: 
  item result
0   浙A     浙A
1   京E     京E
2   12    NaN
3   34    NaN
4    b      b
5    c      c
6    d      d
票数 2
EN

Stack Overflow用户

发布于 2021-03-15 13:08:38

使用np.where结合pd.to_numericdivmod来测试数字。

因为我们只是测试整数,所以我认为与处理字符串相比,这会更有效。

代码语言:javascript
复制
import numpy as np
df['item_new'] = np.where(
    (pd.to_numeric(df['item'],errors='coerce') // 10).ge(1),
    np.nan,
    df['item'])

  item item_new
0   浙A       浙A
1   京E       京E
2   12      NaN
3   34      NaN
4    b        b
5    c        c
6    d        d
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66638490

复制
相关文章

相似问题

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