3 回答

TA贡献1775条经验 获得超8个赞
使用np.where
如:
df['tags'] = np.where(df['tags'].str.contains('class3'),'yes','no')
或者
df['tags'] = 'no'
df.loc[df['tags'].str.contains('class3'),'tags'] = 'yes'
或者
df['tags'] = ['yes' if 'class3' in s else 'no' for s in df3.tags.values]
上述方法的输出:
print(df)
image_name tags
0 img1 yes
1 img2 no
2 img3 yes
3 img4 no

TA贡献1872条经验 获得超3个赞
你也可以这样做:
df['tags'] = df.tags.str.contains('class3').map({True:'Yes',False:'No'})
>>> df
image_name tags
0 img1 Yes
1 img2 No
2 img3 Yes
3 img4 No

TA贡献1878条经验 获得超4个赞
也许这会比 str.contains
v=np.array(['Yes','No'])[np.array(['class3' in x for x in df.tags]).astype(int)]
v
Out[267]: array(['No', 'Yes', 'No', 'Yes'], dtype='<U3')
#df['tags']=v
下面的时间列表
#df=pd.concat([df]*1000)
#sacul
%timeit df.tags.str.contains('class3').map({True:'Yes',False:'No'})
The slowest run took 10.12 times longer than the fastest. This could mean that an intermediate result is being cached.
100 loops, best of 3: 3.11 ms per loop
#Mine
%timeit np.array(['Yes','No'])[np.array(['class3' in x for x in df.tags]).astype(int)]
1000 loops, best of 3: 390 µs per loop
#Borealis
%timeit np.where(df['tags'].str.contains('class3'),'yes','no')
100 loops, best of 3: 2.46 ms per loop
添加回答
举报