13

次のような pandas データフレームがあります。

                                          categories  review_count
0                  [Burgers, Fast Food, Restaurants]           137
1                         [Steakhouses, Restaurants]           176
2  [Food, Coffee & Tea, American (New), Restaurants]           390
...                                          ....              ...
...                                          ....              ...
...                                          ....              ...

このデータフレームから、その行の「カテゴリ」列のリストにカテゴリ「レストラン」が含まれている行のみを抽出したいと思います。私はこれまでに試しました: df[[df.categories.isin('Restaurants'),review_count]]

dataFrame には他の列もあるため、抽出するこれら 2 つの列を指定しました。しかし、私はエラーが発生します:

TypeError: unhashable type: 'list'

私はパンダに非常に慣れていないため、このエラーが何を意味するのかよくわかりません。その行の「カテゴリ」列に、categories_list の一部として文字列「Restaurants」が含まれている行のみをデータフレームから抽出するという目標を達成する方法を教えてください。どんな助けでも大歓迎です。

前もって感謝します!

4

3 に答える 3

14

列の値が何らかのシーケンスであるlambdaかどうかをテストできるため、これには関数を使用する必要があると思いますが、列のシーケンスに何らかの値が含まれているかどうかをテストする関数を提供していないようです:isinpandas

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
于 2013-10-14T04:36:10.963 に答える
2

さて、私はかなり長い間これに対する答えを見つけようとしてきましたが、空になりました (基本的にリストを拡張するための小さな再帰プログラムを作成することなく)。あなたがやろうとしていることは、実際にはそれほど効率的ではなく (リストが変更可能であるというジミー 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   

明らかに、これには、ネストされたリストからカテゴリを引き出し、それを DataFrame にエクスポートする Python プログラムを作成する必要がありますが、この 1 回のヒット (既存のデータの場合) は、pandas を使用して分析することで得られるものにとって価値がある場合があります。結果のデータフレーム。

Wes の著書 Python for Data Analysis には、「Computing Indicator/Dummy Variables」(p. 330 前後) と呼ばれるセクションがあり、この種の操作に適したリソースになります。

申し訳ありませんが、それはあなたの質問に実際には答えていません。それがどれほど実現可能かは確かにわかりませんが、それ以外の場合は、rtrwalker のソリューションを試すことができます。

于 2013-10-14T03:54:41.700 に答える
1

pandas0.12 では次のようなことができると思います:

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

pandas.DataFrame.queryのドキュメント

于 2013-10-14T01:13:49.427 に答える