如何重新分类熊猫数据框列?

我有一个 Pandas 数据框,看起来像这样:


> print(df)


           image_name                       tags

0                img1       class1 class2 class3

1                img2                     class2

2                img3              class2 class3

3                img4                     class1

如何重新分类tags列,以便为任何具有class3值的行分配字符串“yes”,其他所有字符串都分配字符串“no”?


我知道我可以使用以下方法检查搜索词的实例:


df['tags'].str.contains('class3')

但是,我不确定如何将其集成到手头的任务中。


以下是预期的输出:


           image_name                       tags

0                img1                        yes

1                img2                         no

2                img3                        yes

3                img4                         no


皈依舞
浏览 200回答 3
3回答

www说

使用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 tags0       img1  yes1       img2   no2       img3  yes3       img4   no

守着一只汪

你也可以这样做:df['tags'] = df.tags.str.contains('class3').map({True:'Yes',False:'No'})>>> df  image_name tags0       img1  Yes1       img2   No2       img3  Yes3       img4   No

UYOU

也许这会比 str.containsv=np.array(['Yes','No'])[np.array(['class3' in x for x in df.tags]).astype(int)]vOut[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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python