从列中删除具有两位数字的元素的更有效方法



给定代码:

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

带表

item
0   浙A
1   京E
2   12
3   34
4   b
5   c
6   d

我想输入两位数作为nan

预期输出:

item    result
0   浙A  浙A
1   京E  京E
2   12  NaN
3   34  NaN
4   b   b
5   c   c
6   d   d

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

如果有两个数字和可能的其他值,则需要替换:

df['result'] = df['item'].replace('d{2}', np.nan, regex=True)

或者,如果需要只重定位2位数字,而没有其他子字符串值:

df['result'] = df['item'].replace('^d{2}$', np.nan, regex=True)

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

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

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

使用np.wherepd.to_numericdivmod来测试数字。

由于我们只测试整数,我相信这将比使用字符串更有效。

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

相关内容

  • 没有找到相关文章

最新更新