2016-10-28 18 views
3

Pythonでは、文字列が文字列のリストの要素であるかどうかをチェックする方法は?python文字列が文字列のリストの要素であるかどうかをチェックする方法

私が働いている例のデータは次のとおりです。

testData=pd.DataFrame({'value':['abc','cde','fgh']}) 

なぜ次のコードの結果は「偽」である:

testData['value'][0] in testData['value'] 
+0

データはサンプルdfに個別の文字列を含むシリーズとして保存されますが、実際のdfデータは実際には各行の文字列のリストですか?それは根本的に異なるので – EdChum

+0

@EdChumの回答は良いです。元のエラーを修正するには、testData ['value']。values 'の最後の行が' testData ['value'] [0]になるようにtestData ['value']の値をチェックするだけです。 True –

+0

@EdChumを入手してください。私の例のデータは、私の問題をより正確に説明していると思います。あなたが言及した根本的な違いは私が見落としたものかもしれません。 – cone001

答えて

5

場合は、テストするためにベクトル化str.containsを使用することができます文字列は各行に存在/含まれています:

In [262]: 
testData['value'].str.contains(testData['value'][0]) 

Out[262]: 
0  True 
1 False 
2 False 
Name: value, dtype: bool 

任意の行で、その後anyを使用します。

In [264]: 
testData['value'].str.contains(testData['value'][0]).any() 

Out[264]: 
True 

OKあなたの最後の質問に対処するために:

def __contains__(self, key): 
    """True if the key is in the info axis""" 
    return key in self._info_axis 

私たちが何を_info_axisを見れば、実際にある:pd.Series.__contains__が実装されているので、これがある

In [270]: 
testData['value'][0] in testData['value'] 

Out[270]: 
False 

を:

In [269]: 
testData['value']._info_axis 

Out[269]: 
RangeIndex(start=0, stop=3, step=1) 

その後、我々は我々がtestData['value']'abc'を行うときに私たちは本当に'abc'はそれがFalse

例返す理由であるインデックスに実際にあるかどうかをテストしている見ることができます:

In [271]: 
testData=pd.DataFrame({'value':['abc','cde','fgh']}, index=[0, 'turkey',2]) 
testData 

Out[271]: 
     value 
0  abc 
turkey cde 
2  fgh 

In [272]: 
'turkey' in testData['value'] 

Out[272]: 
True 

を私たちは、それが戻っている見ることができますTrueインデックスに 'turkey'があるかどうかをテスト中です

関連する問題