2016-08-14 4 views
0

팬더 데이터 프레임 인덱스에서 문자열 패턴을 포함하는 행을 필터링해야합니다.팬더 데이터 프레임 인덱스의 문자열 패턴을 포함하는 행 필터링

다음 예제에서 찾을 수 있습니다 : How to filter rows containing a string pattern from a Pandas dataframe 여기서 dataframe은 예제와 함께 잘 작동하는 df [df [ "col"] str.contains()]로 필터링됩니다. I는 인덱스 컬럼 "식별자"를 복사하는 경우의 예에서

df = pd.DataFrame({'vals': [1, 2, 3, 4], 'ids': [u'aball', u'bball', u'cnut', u'fball']}) 

는 또한 잘 작동 df.index.str.contains ("볼")를 사용할 수있다.

그러나 데이터 프레임에 df.index.str.contains ("Example")를 사용하면 작동하지 않습니다.

내 데이터 프레임에서 반환 된 값이 array([ True, False ... , True], dtype=bool)이 아니지만 Index([True, False ... , True], dtype='object', length = 667)이 아니기 때문에 작동하지 않는다고 생각합니다.

작동하도록 코드를 재정의하려면 어떻게해야합니까?

필자의 데이터 프레임을 큰 Excel 시트에서 읽으므로 내 데이터 프레임을 붙여 넣지 않습니다.

감사합니다.

+0

그것은'인덱스 될 수 있습니다 ([참, 거짓 ... 참, DTYPE = '객체', 길이 = 667) ' '공')'. 당신은 그렇게 할 필요가 없습니다. 'df [df.index.str.contains ('ball')]'잘 작동합니다. – ayhan

답변

0

인덱스가 문자열인지 확인해야합니다. 아래 예제에서는 오류가 발생합니다.

# Test data 
df = DataFrame([1,2,3,4], index=['foo', 'foo1', 'foo2', 1], columns=['value']) 
df[df.index.str.contains('foo')] 

인덱스를 str으로 변환하면 예상되는 결과를 얻을 수 있습니다. 당신이 (`df.index = df.index.str.contains를 할당하는 경우

df.index = df.index.astype('str') 
df[df.index.str.contains('foo')] 

     value 
foo  1 
foo1  2 
foo2  3