2015-04-05 26 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

相关问题