我有一个名为“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
