2015-04-05 21 views
2

我想查詢一個熊貓數據框中的行,其中一列包含一個包含特定值的元組。在熊貓數據框中返回行,其中列中的元組包含特定值

舉個例子:

User     Col1 
0  1  (cat, dog, goat) 
1  1   (cat, sheep) 
2  1  (sheep, goat) 
3  2   (cat, lion) 
4  2 (fish, goat, lemur) 
5  3   (cat, dog) 
6  4   (dog, goat) 
7  4     cat 

因此,假如我想回到這裏Col1含有「貓」的行,有沒有辦法做到這一點,而無需通過每一行迭代以及執行「如果」(我的實際數據集有更多行)?

df['Col1'].isin(['cat']) 

df['Col1'].str.contains("cat") 

僅返回「真」的最後一排

回答

1

爲什麼不子集的數據幀,然後輸出它的結果嗎?

catdf = df[df['Col1'].str.contains("cat")] 
0

DataFrame列包含字符串和元組的混合。我不認爲你可以避免迭代列。但是你可以用apply方法有效地迭代。示例代碼如下。

import pandas as pd 

# fake data - in a Series for simplicity 
tlist = [('cat', 'dog', 'goat'), 
    ('cat', 'sheep'), 
    ('sheep', 'goat'), 
    ('cat', 'lion'), 
    ('fish', 'goat', 'lemur'), 
    ('cat', 'dog'), 
    ('dog', 'goat'), 
    'cat'] 
s = pd.Series(tlist) 

# iterate Series with a lambda function searching for 'cat' 
s.apply(lambda x: 'cat' in x) 

這給了我下面的輸出

Out[38]: 
0  True 
1  True 
2 False 
3  True 
4 False 
5  True 
6 False 
7  True 
dtype: bool 
1

你可以內apply()使用lambda功能:

df[df["Col1"].apply(lambda x: True if "cat" in x else False)] 

拉姆達返回True"cat"是在細胞中。這適用於兩個字符串("cat" in "cat"True)和元組("cat" in ("cat", "dog")True)。通過子集df,您可以得到lambda爲True的所有行。

+0

你剛剛救了我很多焦慮。謝謝! – Chuck 2017-02-02 14:51:36

+0

很高興能幫到你! – ASGM 2017-02-02 15:22:01

相關問題