给定代码:
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.numeric
和Series.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.where
与pd.to_numeric
和divmod
来测试数字。
由于我们只测试整数,我相信这将比使用字符串更有效。
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