Skip to main content
 首页 » 编程设计

python之为列中包含的值过滤数据框

2025年05月04日14xiaohuochai

我有一个名为“df_business”的 Pandas 数据框。我从下面的数据框中获得了样本。我想过滤类别列中包含“餐厅”的记录的数据框。谁能建议怎么做?

Code: 
 
print(df_business[1:3]) 
 
 
Sample Data: 
 
               address                                         attributes  \ 
1       2824 Milton Rd  {u'GoodForMeal': {u'dessert': False, u'latenig...    
2  337 Danforth Avenue  {u'BusinessParking': {u'garage': False, u'stre...    
 
              business_id                                         categories  \ 
1  mLwM-h2YhXl2NCgdS84_Bw  [Food, Soul Food, Convenience Stores, Restaura...    
2  v2WhjAB3PIBA8J8VxG3wEg                               [Food, Coffee & Tea]    
 
        city                                              hours  is_open  \ 
1  Charlotte  {u'Monday': u'10:00-22:00', u'Tuesday': u'10:0...        0    
2    Toronto  {u'Monday': u'10:00-19:00', u'Tuesday': u'10:0...        0    
 
    latitude  longitude                                name neighborhood  \ 
1  35.236870 -80.741976  South Florida Style Chicken & Ribs     Eastland    
2  43.677126 -79.353285                    The Tea Emporium    Riverdale    
 
  postal_code  review_count  stars state   
1       28215             4    4.5    NC   
2     M4K 1N7             7    4.5    ON   

请您参考如下方法:

将您的 categories 列转换为字符串并使用 str.contains:

m = df_business['categories'].astype(str).str.contains('Restaurant') 
df_business = df_business.loc[m] 

如果您担心部分匹配,将单词边界检查添加到您的正则表达式中可能是有意义的:

r'\bRestaurant\b' 

这对误报的容忍度应该更高一些。


借自jez' data (谢谢!):

In [1864]: df_business 
 
           categories  review_count 
0  [Restaurant, Food]             4 
1              [Food]             7 
 
 
m = df_business['categories'].astype(str).str.contains(r'\bRestaurant\b') 
m 
 
0     True 
1    False 
Name: categories, dtype: bool 
 
df_business = df_business.loc[m] 
df_business 
 
           categories  review_count 
0  [Restaurant, Food]             4