Python 为列中包含的值筛选dataframe
我有一个名为“df_业务”的熊猫数据框架。我有下面数据框中的样本。我想在dataframe中筛选在categories列中包含“Restaurant”的记录。有人能建议怎么做吗Python 为列中包含的值筛选dataframe,python,pandas,Python,Pandas,我有一个名为“df_业务”的熊猫数据框架。我有下面数据框中的样本。我想在dataframe中筛选在categories列中包含“Restaurant”的记录。有人能建议怎么做吗 Code: print(df_business[1:3]) Sample Data: address attributes \ 1 2824 Milton Rd {u'GoodForMea
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
如果
类别
中的值是列表,则需要中的参数:
df_business = df_business[df_business['categories'].apply(lambda x: 'Restaurant' in x)]
或:
样本:
df_business = pd.DataFrame({'categories':[['Restaurant','Food'],['Food']],
'review_count':[4,7]})
print (df_business)
categories review_count
0 [Restaurant, Food] 4
1 [Food] 7
df_business = df_business[df_business['categories'].apply(lambda x: 'Restaurant' in x)]
print (df_business)
categories review_count
0 [Restaurant, Food] 4
如果类别
中的值是列表,则需要中的参数:
df_business = df_business[df_business['categories'].apply(lambda x: 'Restaurant' in x)]
或:
样本:
df_business = pd.DataFrame({'categories':[['Restaurant','Food'],['Food']],
'review_count':[4,7]})
print (df_business)
categories review_count
0 [Restaurant, Food] 4
1 [Food] 7
df_business = df_business[df_business['categories'].apply(lambda x: 'Restaurant' in x)]
print (df_business)
categories review_count
0 [Restaurant, Food] 4
将类别
列转换为字符串并使用str.contains
:
m = df_business['categories'].astype(str).str.contains('Restaurant')
df_business = df_business.loc[m]
如果您担心部分匹配,那么在正则表达式中添加单词边界检查可能有一定意义:
r'\bRestaurant\b'
这应该对误报有一点宽容
借用(谢谢!):
将类别
列转换为字符串并使用str.contains
:
m = df_business['categories'].astype(str).str.contains('Restaurant')
df_business = df_business.loc[m]
如果您担心部分匹配,那么在正则表达式中添加单词边界检查可能有一定意义:
r'\bRestaurant\b'
这应该对误报有一点宽容
借用(谢谢!):
选项1
将所有列表元素组合在一起,查找“餐厅”
df_business[
df_business.categories.str.join('').str.contains('Restaurant')]
categories review_count
0 [Restaurant, Food] 4
选项2
查找列表中'Restaurant'
所在的索引值
mask = np.concatenate(df_business.categories) == 'Restaurant'
idx = df_business.index.repeat(df_business.categories.str.len())
df_business.loc[np.unique(idx[mask])]
categories review_count
0 [Restaurant, Food] 4
设置
借用自@jezrael
选项1
将所有列表元素组合在一起,查找“餐厅”
df_business[
df_business.categories.str.join('').str.contains('Restaurant')]
categories review_count
0 [Restaurant, Food] 4
选项2
查找列表中'Restaurant'
所在的索引值
mask = np.concatenate(df_business.categories) == 'Restaurant'
idx = df_business.index.repeat(df_business.categories.str.len())
df_business.loc[np.unique(idx[mask])]
categories review_count
0 [Restaurant, Food] 4
设置
借用自@jezrael
什么是df_业务['categories']。应用(类型)
?什么是df_业务['categories']。应用(类型)
?谢谢大家,这些都是很好的答案!我想我最喜欢astype(str).str.contains('Restaurant')]解决方案,因为它最容易理解。谢谢大家,这些都是很好的答案!我想我最喜欢astype(str).str.contains('Restaurant')]解决方案,因为它最容易理解。