首页 > 解决方案 > 如何在逗号之间拆分文本并使每个新部分成为新列?

问题描述

所以,我有一个 Pandas 数据框,其中包含一些人喜欢的食物和美食。我必须把它们分成几列,所以每一种食物或菜肴都应该成为一列。每种食物/菜肴都在逗号后面,但如果我只用逗号打破我的字符串,我会丢失括号内的内容,它应该在靠近盘子的地方。我想我应该使用 '),' 作为分隔符,对吧?但我不知道该怎么做。这是我的 DF:

>>> PD_FOODS
  USER_ID  | FOODS_I_LIKE                                                      |
_______________________________________________________________________________
0   100    |   Pizza(without garlic, tomatos and onion),pasta                  |
1   101    |   Seafood,veggies                                                 |
2   102    |   Indian food (no pepper, no curry),mexican food(no pepper)       |
3   103    |   Texmex, african food, japanese food,italian food                |
4   104    |   Seafood(no shrimps, no lobster),italian food(no gluten, no milk)|

是否有可能得到像下面这样的结果?

>>> PD_FOODS
  USER_ID  |   FOODS_I_LIKE_1                          |  FOODS_I_LIKE_2       |
_______________________________________________________________________________
0   100    |   Pizza(without garlic, tomatos and onion)|  pasta                |

谢谢!

标签: pythonpandasdataframe

解决方案


尝试这个:

df=pd.DataFrame({"User_ID":[1000,1001,1002,1003,1004],
               "FOODS_I_LIKE":['Pizza(without garlic, tomatos and onion),pasta',
                              'Seafood,veggies',
                              'Indian food (no pepper, no curry),mexican food(no pepper)',
                              'Texmex, african food, japanese food,italian food',
                              'Seafood(no shrimps, no lobster),italian food(no gluten, no milk)']})

def my_func(my_string, item_num):
    try:
        if ')' in my_string:
            if item_num == 0:
                return my_string.split('),')[item_num]+')'
            else:
                return my_string.split('),')[item_num]
        else:
            return my_string.split(',')[item_num]
    except IndexError:
        return np.nan
    
for k in range(0,4):
    K=str(k+1)
    df[f'FOODS_I_LIKE_{K}']=df.FOODS_I_LIKE.apply(lambda x: my_func(x, k))

df.drop(columns='FOODS_I_LIKE')

输出:

用户身份 FOODS_I_LIKE_1 FOODS_I_LIKE_2 FOODS_I_LIKE_3 FOODS_I_LIKE_4
1000 比萨(不含大蒜、西红柿和洋葱) 意大利面
1001 海鲜 蔬菜
1002 印度菜(没有胡椒,没有咖喱) 墨西哥菜(无胡椒)
1003 德克萨斯州 非洲食品 日本食品 意大利食物
1004 海鲜(无虾,无龙虾) 意大利食物(无麸质,无牛奶)

推荐阅读