Python 为列中包含的值筛选dataframe

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

我有一个名为“df_业务”的熊猫数据框架。我有下面数据框中的样本。我想在dataframe中筛选在categories列中包含“Restaurant”的记录。有人能建议怎么做吗

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')]解决方案,因为它最容易理解。