2016-09-16 2 views
1

다양한 길이와 문자의 문자열이 포함 된 팬더 데이터 프레임이 있습니다.부분 문자열과 일치하는 팬더 데이터 프레임 필터링

print df['name'][0] 
print df['name'][1] 
print df['name'][2] 
print df['name'][3] 

이런 식으로 뭔가를 반환합니다 : 예를 들어

UserId : Z5QF1X33A 
loginId : test.user 
UserId : 0000; searchText : Cap 
accountSampleToExclude : 0; accountSampleName : Sample Text; UserId : Z5QF1X33A; accountSampleType : Test; accountSample : Test 

내가하고 싶은 것은 칼럼을 통해 분석하고는 실제 해당 ID가 등을 기반으로 반환 할 수있다 위의 예 :

Z5QF1X33A 
test.user 
0000
Z5QF1X33A 

나는 정규식이 t를 풀 때 쉽게 접근 할 수 있다고 생각했다. 그의하지만 지금까지 난 단지 부분적으로 만 경우에 일부 하드 의사 해결책을 마련 할 수있었습니다 :

df['name'] = df['name'].str.strip(r'(?<=\UserId :).*') 
df['name'] = df['name'].str.strip(r'(?<=\loginId :).*') 

df['name'][0] 
df['name'][1] 

하지만 같으면 유사하다 행을 위해 일하는 것이 그 다른 경우에는 작동하지 않습니다. 어떤 도움을 많이 주시면 감사하겠습니다, 나는 정규식없이 어쩌면 str.split() 메서드를 사용하여 해결할 수 있지만 pythonic 및/또는 pandas 방식으로 진행하는 방법을 확신 할 수 없다는 것을 알고 있습니다.

답변

0

이 시도 :

이것은 예를 들어 작동
In [31]: df.name.str.extract(r'\b(?:UserId|loginId)\s*:\s*\b([^\s]+)\b', expand=True) 
Out[31]: 
      0 
0 Z5QF1X33A 
1 test.user 
2 0000
3 Z5QF1X33A 
+0

그러나, 너무 장황하지 않다 (? 정규식을 사용하지 않고)이 접근 할 수있는 더 파이썬 방법이있다. – astateofsanj

+0

@ user3356075, "regex 's를 사용하는 중 무엇이 잘못 되었습니까?" – MaxU