为数据帧的每一行获取字符串的第一部分

2024-10-02 12:30:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的数据集


        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'

我该如何解决这个问题


Tags: dfobjecttitlelocationnullrestaurantviahealthy
1条回答
网友
1楼 · 发布于 2024-10-02 12:30:53

partition方法可以从Series.str访问,但是您试图通过df['Cuisine'].partition(',')在pandas系列上直接使用它,这就是您出现错误的原因

另外,您需要在调用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]

相关问题 更多 >

    热门问题