次のようなpandasデータフレームがあります:
_ categories review_count
0 [Burgers, Fast Food, Restaurants] 137
1 [Steakhouses, Restaurants] 176
2 [Food, Coffee & Tea, American (New), Restaurants] 390
... .... ...
... .... ...
... .... ...
_
このdataFrameから、その行の「categories」列のリストにカテゴリ「Restaurants」が含まれている行のみを抽出したいと思います。私はこれまでに試しました:df[[df.categories.isin('Restaurants'),review_count]]
、
dataFrameには他の列もあるので、抽出するこれら2つの列を指定しました。しかし、エラーが発生します:
_TypeError: unhashable type: 'list'
_
私はパンダにとても慣れていないので、このエラーが何を意味するのかよくわかりません。その行の「categories」列にcategories_listの一部として文字列「Restaurants」が含まれているdataFrameからこれらの行のみを抽出するという目標を達成する方法を教えてください。どんな助けでも大歓迎です。
前もって感謝します!
列の値がlambda
シーケンスであるかどうかをテストできるため、これにはisin
関数を使用する必要があると思いますが、pandas
は提供していないようです。列のシーケンスに値が含まれているかどうかをテストするための関数:
import pandas as pd
categories = [['fast_food', 'restaurant'], ['coffee', 'cafe'], ['burger', 'restaurant']]
counts = [137, 176, 390]
df = pd.DataFrame({'categories': categories, 'review_count': counts})
# Show which rows contain 'restaurant'
df.categories.map(lambda x: 'restaurant' in x)
# Subset the dataframe using this:
df[df.categories.map(lambda x: 'restaurant' in x)]
出力:
Out[11]:
categories review_count
0 [fast_food, restaurant] 137
2 [burger, restaurant] 390
さて、私はかなり前からこれに対する答えを見つけようとしていましたが、(基本的にリストを拡張するための小さな再帰プログラムを作成せずに)空になりました。それはとにかく最初は赤面しているからだと思います。あなたがやろうとしていることは、実際にはそれほど効率的ではなく(リストが変更可能であるというジミーCのコメントはここにあります)、パンダでほとんどの場合これを行う方法ではありません。
より良い、そして(私が思うに)より速い方法は、ネストされたリストを列の値として保存することです。
df
review_count Burgers Fast Food Restaurants Steakhouses Food CoffeeTea American (New)
0 137 True True True False False False False
1 176 False False True True False False False
2 390 False False True False True True True
明らかに、これにはpythonプログラムを記述して、ネストされたリストからカテゴリを引き出し、それをDataFrameにエクスポートする必要がありますが、この1回のヒット(既存のデータの場合)は価値があるかもしれませんpandasを使用して、結果のデータフレームを分析することで得られるものについて。
Wesの本Python "Computing Indicator/Dummy Variables"(p。330程度)と呼ばれるデータ分析のセクションがあります。これは、この種の操作に適したリソースです。
申し訳ありませんが、それはあなたの質問に本当に答えません、そして私は確かにそれがどれほど実行可能かわかりません、しかしそうでなければ、かなり見栄えのするrtrwalkerのソリューションを試すことができます、しかしそれは開発ブランチです、ちょうど参考までに。
Pandas0.12では、次のようなことができると思います。
df.query('"Restaurants" in categories')
docs at pandas.DataFrame.query