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

如何在CSV Python 2.7中仅搜索精确值?,python,csv,pandas,numpy,Python,Csv,Pandas,Numpy,我使用pandas和numpy搜索我的CSV文件,问题是,例如,如果我搜索'foo',值为'foo1',它仍将返回true。我怎么能只搜索“foo”而不搜索其他内容?我正在搜索特定的行,但该值偶尔只会在其末尾添加一个数字,例如“foo”将更改为“foo1”或“foo2”,我无法真正更改它。这是我的密码: df = pd.read_csv('MyFile.csv') x = np.where((df['Name'] == name) & (df['Num'] == 'foo')) try:

我使用pandas和numpy搜索我的CSV文件,问题是,例如,如果我搜索'foo',值为'foo1',它仍将返回true。我怎么能只搜索“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

要查找
foo
foo
,只有您可以执行以下操作:

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

我认为您的解决方案会起作用,仅适用于
np。如果有必要,请省略:

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
如果需要标量输出,请至少添加一个
True

val = ((df['Name'] == name) & (df['Num'] == 'foo')).any()
print (val)
True
或者如果需要检查所有值,如果
True
添加:


你说“搜索特定行”是什么意思?您想要什么样的输出?向我们展示
df['Num']
列的示例,并指出您想要查找哪些项目。要保留或排除
df['Num']=='foo1'
中的行吗。此外,我不明白该测试的目的。@hpaulj我正在尝试搜索csv中的名称,并检查它们的Num是否与上次运行脚本时的Num相同。如果它是相同的,我想返回True,如果它改变了,我想返回False。但是,如果Num更改为'foo1',它仍然返回True,尽管它已更改。对于x[0][0]测试,我只是将此用作查看是否找到x的一种方法。它给我数组中的行,[0][0]给我str形式的行,然后我添加一行,因为它不考虑标题行。我相信有一个更简单的方法,但我不知道。@Ecom1414如果这个答案对你有用,为什么不接受呢?
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