在python中,我需要删除1

2024-10-06 09:09:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大数据帧,如下所示:

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

Tags: 数据name单词df1样本keywordsfeastramesh
3条回答

将嵌套列表理解与joinsplit一起使用:

注意:

假设没有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

使用^{}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

正则表达式解释:

  1. ^r检查字符串开头是否有r。你知道吗
  2. (?<=,)[r]检查每个,之后是否有r

^{}实现的列表理解方法比str.replace更快,而如果您有null/NaN值,那么str.replace可以处理那些没有拥挤的列表。你知道吗

相关问题 更多 >