如果熊猫数据框中包含特定的子字符串,请替换该字符串

时间:2019-01-15 12:28:00

标签: python string pandas lambda

我有一个由.csv生成的数据帧(我使用Python 3.5)。 df['category']仅包含字符串。我想要的是检查此列,以及字符串是否包含特定的子字符串(只要它们存在,对它们在字符串中的位置并不真正感兴趣)就可以替换。我正在使用此脚本

import pandas as pd

df=pd.read_csv('lastfile.csv')


df.dropna(inplace=True)

g='Drugs'
z='Weapons'
c='Flowers'


df.category = df.category.str.lower().apply(lambda x: g if ('mdma' or 'xanax' or 'kamagra' or 'weed' or 'tabs' or 'lsd' or 'heroin' or 'morphine' or 'hci' or 'cap' or 'mda' or 'hash' or 'kush' or 'wax'or 'klonop'or\
                                                            'dextro'or'zepam'or'amphetamine'or'ketamine'or 'speed' or 'xtc' or 'XTC' or 'SPEED' or 'crystal' or 'meth' or 'marijuana' or 'powder' or 'afghan'or'cocaine'or'haze'or'pollen'or\
                                                            'sativa'or'indica'or'valium'or'diazepam'or'tablet'or'codeine'or \
                                                            'mg' or 'dmt'or'diclazepam'or'zepam'or 'heroin' ) in x else(z if ('weapon'or'milit'or'gun'or'grenades'or'submachine'or'rifle'or'ak47')in x else c) )






print(df['category'])

我的问题是,尽管某些记录包含我定义的某些子字符串,但它们不会被替换。是正则表达式相关的问题吗? 预先谢谢你。

1 个答案:

答案 0 :(得分:2)

使用替换字符串的键创建子字符串列表的字典,对其进行循环,并用正则表达式|的{​​{1}}连接所有列表值,因此可以用contains检查列并替换匹配的行与OR

loc