2017-10-29 3 views
1

함수를 작성하거나 ID가 특정 형식을 따르는 지 확인하는 명령을 사용합니다. 즉 ID의 길이는 9 자리가되어야하며 첫 번째 숫자는 알파벳이 되라. 그렇지 않으면 그 ID 번호에 해당하는 행을 걸러 내고 싶습니다. 예를 들어, 나는이 DataFrame이 (전화는 DF) : df = df[df['ID'].str.len()==9]를 사용데이터 프레임 파이썬에서 잘못된 형식의 셀을 필터링하는 방법

  ID   status 
    0 B12345678 graduated 
    1 C12345678 graduated 
    2 A12345678 in progress 
    3 111111111 unknown 
    4 A3B111111 unknown 
    5 A12 unknown 

, 나는

  ID   status 
    0 B12345678 graduated 
    1 C12345678 graduated 
    2 A12345678 in progress 
    3 111111111 unknown 
    4 A3B111111 unknown 

그러나 행 3과 4를 얻기 위해 마지막 행을 필터링 할 수 있습니다 여전히 올바른 형식 아니다 그리고 나는 그것도 걸러 낼 필요가있다. 이 작업을 수행하는 효율적인 방법은 무엇입니까?

나는

df = df[df['ID'].isdigit()] 

을 시도하지만 난라는 오류가있어 " '시리즈의 목적은'isdigit에 '를 어떤 속성이 없다"

내 데이터 프레임의 코드는 다음과 같습니다

students = [('ID', ['B12345678', 'C12345678', 'A12345678','111111111','A3B111111','A12']), 
('status', ['graduated', 'graduated','in progress','unknown','unknown','unknown']) 
] 


df = pd.DataFrame.from_items(students) 

답변

2

을 해당 RegEx와 함께 Series.str.match()을 사용하십시오.

In [4]: df[df['ID'].str.match(r'[A-Z]\d{8}')] 
Out[4]: 
      ID  status 
0 B12345678 graduated 
1 C12345678 graduated 
2 A12345678 in progress 

또는

df[df['ID'].str.match(r'[A-Z]\d{8}', case=False)] 

첫 글자뿐만 아니라 소문자로

+0

감사를 발생할 수 있습니다합니다. 이러한 데이터가 스트리밍되는 경우 어떻게해야합니까? 예를 들어 하나의 행이나 하나의 ID 요소 (예 : B12345678) 만 확인하려면 어떻게해야합니까? 내가 'str'객체에 'str'속성이 없다는 오류가 계속 발생합니다. 하나의 요소 만 검사하려고 할 때 – Mark

관련 문제