在列中剪切字符串的重要部分

时间:2018-11-14 12:08:10

标签: string pandas slice

我有一个名为Gruen的列,其中包含一个字符串。我的目标是从列中仅获取字符串Gelb Orange Gruen,并创建一个新列,该列代表每行(如果包含Gelb Orange {{ 1}}

我尝试使用以下代码:

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

因为这些单词的长度并不相等,所以我得到4_或1_或只是_,这取决于我要切出的是Gruen还是Gelb。是否有可能获得Dateiname列的Gruen Gelb Orange部分并将其保存到Y列中?

<code>Gruen</code> <code>Gelb</code> <code>Orange</code>

目标是:

enter image description here

3 个答案:

答案 0 :(得分:2)

使用str.extract

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

另一种解决方案是_.的{​​{3}}并通过索引从结尾获取第二个值:

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

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

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

答案 1 :(得分:1)

如果您的数据遵循与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

答案 2 :(得分:0)

您可以使用:

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