2016-10-28 2 views
3

파이썬에서 문자열이 문자열 목록의 요소인지 확인하는 방법은 무엇입니까?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 : 우리가 무엇을 _info_axis 보면

def __contains__(self, key): 
    """True if the key is in the info axis""" 
    return key in self._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) 
그런

우리는 우리가 정말 'abc' 그것이 False

예 반환 이유 인덱스에 실제로 있는지 여부를 테스트하고 testData['value']'abc'을 수행 할 때 우리가 볼 수

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 이제 '칠면조'가 색인에 포함되어 있는지 테스트 중이므로

관련 문제