我有一个很大的数据框,如下所示:
df1(示例数据)
a name keywords
1 ramesh rrahul,rapple
2 venkat rtemple
3 rajesh rcake,rphone,rmaths
4 lamda rcon
5 feast rcamera,rtab
我想删除字母<{1},该字母出现在每个单词的开头 ,该字符串由逗号分隔的单词组成。输出应如下所示:
r
答案 0 :(得分:6)
对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
答案 1 :(得分:2)
将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
可以照顾那些没有烦恼的人。
答案 2 :(得分:1)
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