2017-04-21 9 views
1

私はCSVファイルを検索するためにパンダとnumpyを使用していますが、問題は、たとえば、私が 'foo'を探していて、値が 'foo1'であれば、それでもtrueを返します。どうすれば '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が見つかったかどうかを調べる方法として使用しています。それは私に配列の行番号を与え、[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 

必要がある場合スカラー出力は少なくとも1つのチェックのためanyを追加しますTrue

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

場合やTrueallを追加した場合、すべての値を確認必要があります。

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 
関連する問題