【问题标题】:cut important parts of string in a column在列中剪切字符串的重要部分
【发布时间】:2019-04-17 09:38:13
【问题描述】:

我有一个名为Dateiname 的列,其中包含一个字符串。我的目标是只从列中获取字符串GruenGelbOrange,并创建一个表示每一行的新列,如果它包含GruenGelbOrange

我尝试使用此代码:

result['Y'] =  result.Dateiname.str[-10:-4]

因为这些词的长度不一样,所以我得到 4_ 或 1_ 或只是 _,这取决于我想要切掉的是 Gruen 还是 Gelb。有没有可能得到Dateiname列的GruenGelbOrange的部分并将其保存到Y列中?

目标是这样的:

【问题讨论】:

    标签: string pandas slice


    【解决方案1】:

    使用str.extract:

    result['Y'] =  result.Dateiname.str[-10:-4].str.extract('(Gruen|Gelb|Orange)')
    

    另一种解决方案是 split by _. 并通过索引从末尾获取第二个值:

    result.Dateiname.str.split('_|\.').str[-2]
    

    或者如果要检查所有数据:

    result['Y'] =  result.Dateiname.str.extract('(Gruen|Gelb|Orange)')
    

    【讨论】:

      【解决方案2】:

      你可以使用:

      result['Y'] = result['Dateiname'].str.split('_').str[-1].str[:-4]
      

      【讨论】:

        【解决方案3】:

        如果您的数据格式与required_word 后跟.csv 相同,则将str.extract 与正则表达式一起使用:

        例如:

        result = pd.DataFrame({'Dateiname':['asdfjaskld_3242_34.fsdf_450_Violet.csv',
                                        'asdfjaskld_3242_34.fsdf_450_Green.csv',
                                        'asdfjaskld_3242_34.fsdf_450_Indigo.csv',
                                        'asdfjaskld_3242_34.fsdf_450_Red.csv']})
        
        result['Y'] = result.Dateiname.str.extract(r'([a-zA-Z]+).csv')
        
        print(result)
                                        Dateiname       Y
        0  asdfjaskld_3242_34.fsdf_450_Violet.csv  Violet
        1   asdfjaskld_3242_34.fsdf_450_Green.csv   Green
        2  asdfjaskld_3242_34.fsdf_450_Indigo.csv  Indigo
        3     asdfjaskld_3242_34.fsdf_450_Red.csv     Red
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-07
          相关资源
          最近更新 更多