web-dev-qa-db-ja.com

python)の文字列のリストを含む列

次のような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からこれらの行のみを抽出するという目標を達成する方法を教えてください。どんな助けでも大歓迎です。

前もって感謝します!

12
anonuser0428

列の値が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
12
Marius

さて、私はかなり前からこれに対する答えを見つけようとしていましたが、(基本的にリストを拡張するための小さな再帰プログラムを作成せずに)空になりました。それはとにかく最初は赤面しているからだと思います。あなたがやろうとしていることは、実際にはそれほど効率的ではなく(リストが変更可能であるというジミー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のソリューションを試すことができます、しかしそれは開発ブランチです、ちょうど参考までに。

3
Jeremy Low

Pandas0.12では、次のようなことができると思います。

df.query('"Restaurants" in categories')

docs at pandas.DataFrame.query

2
rtrwalker