给定的代码:
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实现这一目标的最简单方法是什么?
发布于 2021-03-15 13:02:17
如果需要替换,如果有2位数,也可能有另一个值:
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发布于 2021-03-15 13:03:51
检查item是否为numeric,其length是否为2使用Series.str.numeric和Series.str.len
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发布于 2021-03-15 13:08:38
使用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 dhttps://stackoverflow.com/questions/66638490
复制相似问题