2017-06-11 70 views
2

比方說,我有一個具有列表作爲其值的數據幀:在熊貓中,如何查詢列表?

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

我可以很容易地查詢它的字符串:

df[df['author'] == 'Dickens, Charles'] 

其正確返回df子集相匹配的標準。但是,當我有是列表單元格內容,如languages其值之類的東西['en'],我似乎無法尋找它:

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

我得到:

ValueError: Arrays were different lengths: 2 vs 1 

我怎麼能查詢列表中的內容?

+0

如果您提供了一個工作示例,以便圍繞您的意思和數據外觀沒有歧義,那麼最好。請參閱[** MCVE **](http://stackoverflow.com/help/mcve) – piRSquared

+0

好的,修改爲包含一個可行的示例。 – Jono

回答

3

你可能做的是用apply方法來遍歷languages列,然後比較的品種:

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

我通常使用isin()篩選器並將列表作爲參數傳遞。

lst = ['A', 'B'] 
df[df['column'].isin(lst)] 
+0

df ['languages']。isin(['en'])給出'TypeError:unhashable type:'list'' – Jono

1

我們可以使用一些技巧把這個跑得更快。請注意,這樣可以避免使用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]