我正在使用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
答案 0 :(得分:1)
要查找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
答案 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