2017-07-02 7 views
1
import pandas as pd 

businesses = pd.read_json(businesses_filepath, lines=True, encoding='utf_8') 
restaurantes = businesses['Restaurants' in businesses['categories']] 

、しかしエラー「KeyError例外:偽」を与えた私は、カテゴリ欄のレストランをお持ちでない行を削除したいと思い、この列がリストを持っていると私は理解したいと思いますなぜ、どのように解決するか。KeyError例外:パンダのデータフレームにおける偽

+2

ビジネス['categories']の 'Restaurants'は、スカラー 'False'(または' True')に評価されるネイティブのPython式です。 「レストラン」は単にカテゴリーの1つではない?その場合には、あなたは 'business [businesses.categories == 'Restaurants']'を必要とします。 –

答えて

3

'Restaurants' in businesses['categories']は、ブール値Falseを返します。これは、Falseという列を含まないDataFrameビジネスの括弧インデックス演算子に渡され、KeyErrorを発生させます。

あなたが探しているのは、このように動作するブールインデックス作成と呼ばれるものです。

私はあなたがした何を意味するかと思います
businesses[businesses['categories'] == 'Restaurants'] 
+0

同じ考え方、別の構文、upvote、well done –

1

businesses = businesses.loc[businesses['categories'] == 'Restaurants'] 

あなたのデータは、スペルのバリエーションまたは代替のレストラン関連の用語が含まれていることが判明した場合のみ、カテゴリレストラン

0

で行を維持します、次のような利点があります。基本的にレストラン関連の用語をrestuarant_lstに設定します。 restaurant_lstの項目のいずれかがビジネス系列の各行に含まれる場合、lambda関数はtrueを返します。 .locインデクサは、lambda関数の場合、falseを返す行をフィルタリングします。

restaurant_lst = ['Restaurant','restaurantes','diner','bistro'] 
restaurant = businesses.loc[businesses.apply(lambda x: any(restaurant_str in x for restaurant_str in restaurant_lst))] 
関連する問題