【问题标题】:In python I need to remove 1st letter在python中我需要删除第一个字母
【发布时间】:2019-04-11 21:52:17
【问题描述】:

我有一个大数据框如下:

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

【问题讨论】:

  • 你是如何读取数据的?那是熊猫数据框吗?一个csv文件?到目前为止你尝试过什么?
  • 这是一个熊猫数据框
  • @RahulVarma - 每个单词的首位总是r?或者有时不可能?

标签: python string pandas


【解决方案1】:

joinsplit 使用嵌套列表推导:

通知

假设没有 null/NaN 值。

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

【讨论】:

    【解决方案2】:

    使用str.replaceregex 模式作为:

    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. (?&lt;=,)[r] 检查每个, 后面是否有r

    jezrael 的列表解析方法比 str.replace 快,而如果您有 null/NaN 值,那么 str.replace 可以处理那些不忙的人。

    【讨论】:

      【解决方案3】:
      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多