2017-06-11 6 views
2

はのは、私がその値としてリストを持っているデータフレームを持っているとしましょう:パンダでは、リストを問い合わせる方法は?

df = pd.DataFrame({'languages': [['en'], ['fr']], 'author': ['Dickens, Charles', 'Austen, Jane']}) 

私は簡単に文字列のためにそれを照会することができます

正しくその基準に一致 dfのサブセットを返し
df[df['author'] == 'Dickens, Charles'] 

。しかし、私はこのような値['en']のようなものですlanguagesとしてリストされているセルの内容を、持っているとき、私はそれを検索するために見えることはできません。

df[df['languages'] == ['en']] 

私が手:

ValueError: Arrays were different lengths: 2 vs 1 

どのようにすることができますがリストであるコンテンツのクエリ?

+0

あなたが意味することとデータの外観のあいまいさがなくなるように実際の例を提供するのが最善です。 [** MCVE **](http://stackoverflow.com/help/mcve)を参照してください – piRSquared

+0

OK、実行可能な例を含むように改訂されました。 – Jono

答えて

3

languages列をループしapplyメソッドを使用して、項目を比較です。これにより、applyの使用が回避されることに注意してください。

# create a numpy array of lists... one list to be exact 
c = np.empty(1, object) 
c[0] = ['en'] 

df[df.languages.values == c] 

      author languages 
0 Dickens, Charles  [en] 
0

私は通常、isin()フィルタを使用し、引数としてリストを渡します。

df[df.languages.apply(lambda x: x == ['en'])] 
#    author languages 
#0 Dickens, Charles [en] 
+0

df ['languages']。isin(['en'])は、 'TypeError:unhashable type: 'list''を返します。 – Jono

1

私たちは、これを高速に実行するために取得するには、いくつかの策略を使用することができます:あなたが行う可能性がありますどのような

lst = ['A', 'B'] 
df[df['column'].isin(lst)] 
関連する問題