我有一个如下数据框。
d = {'ID' : ['123456789012345678', '3456789012345678']
}
df = pd.DataFrame(d)
,输出为
ID
0 123456789012345678
1 3456789012345678
我想创建一个新列is_valid
,使得如果ID value
的长度为18
,则true
否则为false
也就是说,预期的输出是
ID is_valid
0 123456789012345678 Yes
1 3456789012345678 No
现在我使用正则表达式如下
expr = '^[0-9]{18}$'
df['is_valid'] = np.where(df['ID'].str.match(expr), 'Yes', 'No')
有没有更好的方法来实现它?
答案 0 :(得分:2)
df['is_valid'] = df.ID.str.len().eq(18)
[出]
ID is_valid
0 123456789012345678 True
1 3456789012345678 False
答案 1 :(得分:2)
%timeit -n 1000
expr = '^[0-9]{18}$'
%timeit df['is_valid'] = np.where(df['ID'].str.match(expr), 'Yes', 'No')
#320 µs ± 7.97 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit -n 5000
%timeit df['validation']=['True' if len(s)>=18 else 'False' for s in df['ID']]
#201 µs ± 10.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
答案 2 :(得分:1)
您可以根据条件使用np.where在Yes
和No
之间切换:
df['is_valid'] = np.where(df.ID.str.len().eq(18), 'Yes', 'No')
# ID is_valid
#0 123456789012345678 Yes
#1 3456789012345678 No