我有下表
df = pd.DataFrame({'favs':{0:'chicken_panfry1_t360_ketchup',
1:'chicken_bake2_t450_out_bbq',
2:'chicken_boiled2_season_gravy'}})看上去像这样
favs
0 chicken_panfry1_t360_ketchup
1 chicken_bake2_t450_out_bbq
2 chicken_boiled2_season_gravy我想在最后一个下划线处分割列,创建两个新列,如下所示。
favs recipe sauce
0 chicken_panfry1_t360_ketchup chicken_panfry1_t360 ketchup
1 chicken_bake2_t450_out_bbq chicken_bake2_t450_out bbq
2 chicken_boiled2_season_gravy chicken_boiled2_season gravy这就是我试过的
df[['recipe','sauce']]=df['favs'].str.split(r'.*_', expand=True)这将正确地创建沙司列,但菜谱列为空白。它看起来像这样。不知道怎么改正。
favs recipe sauce
0 chicken_panfry1_t360_ketchup ketchup
1 chicken_bake2_t450_out_bbq bbq
2 chicken_boiled2_season_gravy gravy发布于 2022-03-23 14:15:27
您需要具有Series.str.extract正则表达式模式的(.*)_(.*):
df[['recipe','sauce']]=df['favs'].str.extract(r'(.*)_(.*)', expand=True)见regex演示。
(.*)_(.*)正则表达式将最后一个_之前的部分匹配并捕获到第1组(使用第一个(.*)),将最后一个_之后的部分匹配到第二个列中(使用第二个(.*))。
发布于 2022-03-23 14:16:31
不需要正则表达式,您可以简单地将rsplit限制为1拆分:
df[['recipe','sauce']] = df['favs'].str.rsplit('_', n=1, expand=True)产出:
favs recipe sauce
0 chicken_panfry1_t360_ketchup chicken_panfry1_t360 ketchup
1 chicken_bake2_t450_out_bbq chicken_bake2_t450_out bbq
2 chicken_boiled2_season_gravy chicken_boiled2_season gravyhttps://stackoverflow.com/questions/71588724
复制相似问题