Возьмите первую часть строки для каждой строки кадра данных

#python #pandas #dataframe

Вопрос:

У меня есть такой набор данных

 
        Title                   Location                                            Cuisine 
restaurant_id                                   
0   ['Dove Bistrot Lenovo       Corso Giacomo Matteotti 8/10 Primo Piano Spazi...   Italian, Seafood, Mediterranean, Healthy, Hawa...   
1   ['Mabuhay Restaurant        Bastioni di Porta Volta 9, 20121 Milan Italy        Filipino, Healthy   
2   ['Star Zagros Kebabbar      Corso 22 Marzo, 38, 20135 Milan Italy               Middle Eastern, Turkish, Pub, Bar, Internation...   
3   ['Shabby Grill Restaurant   Via Domokos 4, 20147 Milan Italy                    Italian, Steakhouse, Barbecue   
4   ['Il Panino del Laghetto    Via Laghetto 7, 20122 Milan Italy                   Italian, Street Food, Fast Food
 

Если я наберу df.info() Я понимаю это:

 <class 'pandas.core.frame.DataFrame'>
Int64Index: 273 entries, 0 to 272
Data columns (total 9 columns):
 #   Column    Non-Null Count  Dtype 
---  ------    --------------  ----- 
 1   Title     273 non-null    object
 2   Location  273 non-null    object
 3   Cuisine   273 non-null    object
 

Я хотел бы создать столбец «Категория», в котором просто сохранен первый столбец «Мир кухни», например, для 5 перечисленных строк: Итальянский, Филиппинский, Ближневосточный, Итальянский, Итальянский

Если я сделаю что-то подобное:

 df['Category'] = df['Cuisine'].partition(',')
 

Там было бы написано:

 AttributeError: 'Series' object has no attribute 'partition'
 

Как мне это исправить?

Ответ №1:

partition к методу можно получить доступ, Series.str но вы пытаетесь использовать его непосредственно в серии pandas df['Cuisine'].partition(',') , и именно по этой причине вы получаете ошибку.

Кроме того, вам нужно взять первый пункт после вызова Series.str.partition , вот что [0] делается в приведенном ниже коде:

 df['Category'] = df['Cuisine'].str.partition(',')[0]

                        Title        Location         Cuisine        Category
restaurant_id                                                                
0              ['Dove Bist...  Corso Giaco...  Italian, Se...         Italian
1              ['Mabuhay R...  Bastioni di...  Filipino, H...        Filipino
2              ['Star Zagr...  Corso 22 Ma...  Middle East...  Middle Eastern
3              ['Shabby Gr...  Via Domokos...  Italian, St...         Italian
4              ['Il Panino...  Via Laghett...  Italian, St...         Italian
 

Но лучшим вариантом было бы просто использовать Series.str.split параметр maxsplit n=1 :

 df['Category']=df['Cuisine'].str.split(',', n=1).str[0]