如何只在CSV Python 2.7中搜索精确值?

时间:2017-04-21 03:00:16

标签: python csv pandas numpy

我正在使用pandas和numpy来搜索我的CSV文件,问题是,例如,如果我正在搜索“foo”'而价值是' foo1'它仍然会返回真实。我怎样才能搜索' foo'没别的?我正在搜索特定的行,但是值偶尔只会在其末尾添加一个数字,例如' foo'将改为' foo1'或者' foo2'我无法真正改变这一点。这是我的代码:

df = pd.read_csv('MyFile.csv')
x = np.where((df['Name'] == name) & (df['Num'] == 'foo'))
try:
    if (x[0][0] + 1) > 0: #also if someone has a better method
        return True       #for returning True please let me know
except IndexError:
    return False

2 个答案:

答案 0 :(得分:1)

要查找foofoo,您可以执行以下操作:

df = pd.DataFrame({"a":["foo","bar","foobar"]})
df
    a
0   foo
1   bar
2   foobar

df["a"].str.contains("^foo$")
0     True
1    False
2    False
Name: a, dtype: bool

答案 1 :(得分:0)

我认为您的解决方案可行,只有np.where必须省略:

df = pd.DataFrame({'Num':['foo', 'foo1', 'foow'], 'Name':['name1','name1','name3']})

print (df)
    Name   Num
0  name1   foo
1  name1  foo1
2  name3  foow

name = 'name1'
mask = (df['Name'] == name) & (df['Num'] == 'foo')
print (mask)
0     True
1    False
2    False
dtype: bool

如果需要标量输出,请添加any以检查至少一个True

val = ((df['Name'] == name) & (df['Num'] == 'foo')).any()
print (val)
True

如果True添加all <:p>,则需要检查所有值

df = pd.DataFrame({'Num':['foo', 'foo'], 'Name':['name1','name1']})

print (df)
    Name  Num
0  name1  foo
1  name1  foo

name = 'name1'
val = ((df['Name'] == name) & (df['Num'] == 'foo')).all()
print (val)
True