2017-04-21 37 views
1

我正在使用熊貓和numpy搜索我的CSV文件,問題是,例如,如果我正在搜索'foo'並且值爲'foo1',它仍然會返回true。我怎麼只搜索'foo'而沒有別的?我正在搜索特定的行,但該值偶爾會得到一個添加到其末尾的數字,如'foo'將變爲'foo1'或'foo2',我無法真正改變它。這裏是我的代碼:如何僅在CSV Python 2.7中搜索確切的值?

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

什麼時,你說你是你的意思是「搜索特定行」?你想要什麼樣的輸出? – ASGM

+0

向我們展示'df ['Num']'列的示例,並指出要查找哪些項目。你想保留還是排除'df ['Num'] =='foo1''的行。我也不明白'x [0] [0]'測試的目的。 – hpaulj

+0

@hpaulj我試圖搜索一個csv的名稱,並檢查他們的Num是否與上次運行腳本時的相同。如果它是相同的,我想返回True,如果它改變了,我想返回False。但是,如果Num更改爲'foo1',它仍會返回True,儘管它已被更改。對於x [0] [0]測試,我只是用它來查看是否找到了x。它給了我一個數組中的row#,[0] [0]給了我一行str,然後我添加一個,因爲它沒有考慮到標題行。我確信有一個更簡單的方法,但是一個idk。 – Ecom1414

回答

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 
+0

@ Ecom1414如果它適合你,爲什麼不接受答案? –

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所有值:

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