我有一个名为Gruen
的列,其中包含一个字符串。我的目标是从列中仅获取字符串Gelb
Orange
Gruen
,并创建一个新列,该列代表每行(如果包含Gelb
Orange
{{ 1}}
我尝试使用以下代码:
result['Y'] = result.Dateiname.str[-10:-4]
因为这些单词的长度并不相等,所以我得到4_或1_或只是_,这取决于我要切出的是Gruen还是Gelb。是否有可能获得Dateiname列的Gruen
Gelb
Orange
部分并将其保存到Y
列中?
目标是:
答案 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]