我有一个大型数据框如下:
df1(样本数据)
a name keywords
1 ramesh rrahul,rapple
2 venkat rtemple
3 rajesh rcake,rphone,rmaths
4 lamda rcon
5 feast rcamera,rtab
我想删除字母r
,它出现在由逗号分隔的单词组成的字符串中每个单词的开头。输出应如下:
a name keywords
1 ramesh rahul,apple
2 venkat temple
3 rajesh cake,phone,maths
4 lamda con
5 feast camera,tab
使用str.replace
和regex
模式:
import re
pat = re.compile(r'^r|(?<=,)[r]')
df['keywords'] = df.keywords.str.replace(pat,'')
要么:
df['keywords'] = df.keywords.str.replace(r'^r|(?<=,)[r]','')
print(df)
a name keywords
0 1 ramesh rahul,apple
1 2 venkat temple
2 3 rajesh cake,phone,maths
3 4 lamda con
4 5 feast camera,tab
正则表达式的解释:
^r
检查字符串开头是否有r
。(?<=,)[r]
检查每个r
后是否有,
jezrael
的列表理解方法比str.replace
快,而如果你有null / NaN值,那么str.replace
可以照顾那些没有喧嚣的人。
使用嵌套列表理解与join
和split
:
注意:
假设没有null / NaNs值。
df['keywords'] = [','.join(y[1:] for y in x.split(',')) for x in df['keywords']]
print (df)
a name keywords
0 1 ramesh rahul,apple
1 2 venkat temple
2 3 rajesh cake,phone,maths
3 4 lamda con
4 5 feast camera,tab
如果可能的话,有时候不存在r
的第一个字母可能与if-else
有点变化的解决方案:
print (df)
a name keywords
0 1 ramesh aa,rapple
1 2 venkat rtemple
2 3 rajesh rcake,rphone,rmaths
3 4 lamda rcon
4 5 feast rcamera,rtab
df['keywords'] = [','.join(y[1:] if y[0] == 'r'
else y
for y in x.split(',')) for x in df['keywords']]
print (df)
a name keywords
0 1 ramesh aa,apple
1 2 venkat temple
2 3 rajesh cake,phone,maths
3 4 lamda con
4 5 feast camera,tab
df["keywords"] = df["keywords"].apply(lambda x: ",".join([w[1:] if w[0] == "r" else w for w in x.split(",")]) )
df
a name keywords
1 ramesh rahul,apple
2 venkat temple
3 rajesh cake,phone,maths
4 lamda con
5 feast camera,tab