簡體   English   中英

使用正則表達式將一列拆分為多個

[英]Splitting a column into multiple using regular expression

我有下表

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

我想在最后一個下划線處拆分該列,以創建 2 個如下所示的新列。

 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

您需要使用(.*)_(.*)正則表達式模式的Series.str.extract

df[['recipe','sauce']]=df['favs'].str.extract(r'(.*)_(.*)', expand=True)

請參閱正則表達式演示

(.*)_(.*)正則表達式將最后一個_之前的部分匹配並捕獲到第 1 組(使用第一個(.*) ),並將最后一個_之后的部分捕獲到第二列(使用第二個(.*) ).

不需要正則表達式,您可以簡單地rsplit限制為 1 個拆分:

df[['recipe','sauce']] = df['favs'].str.rsplit('_', n=1, expand=True)

output:

                           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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM