2016-07-26 2 views
2

У меня есть кадр данных Pandas со столбцом под названием Zip Code. Столбец представляет собой тип данных объекта, а некоторые строки не соответствуют формату почтового индекса. Я хотел бы удалить строки, которые не содержат ##### формат zipcode.Удаление некоторых строк в Pandas Dataframe по строковым формам

Subscriber Type  Zip Code 
0 Subscriber   94040 
1 Customer   11231 
2 Customer   11231 
3 Customer   32 
4 Customer   nil 

Что было бы простым способом сделать это? Есть ли способ сравнить формат и записи что-то вроде этого? df.drop (! ДФ [ 'почтового индекса'] = #####)

+0

Почему вы не делаете 'df = df [df ['Zip Code']! = #####)'. – shivsn

ответ

4

попробовать это:

In [23]: df = df[df['Zip Code'].str.contains(r'^\d{5}$')] 

In [24]: df 
Out[24]: 
    Subscriber Type Zip Code 
0  Subscriber 94040 
1  Customer 11231 
2  Customer 11231 

Объяснение:

In [22]: df['Zip Code'].str.contains(r'^\d{5}$') 
Out[22]: 
0  True 
1  True 
2  True 
3 False 
4 False 
Name: Zip Code, dtype: bool 

PS благодаря @Alberto Garcia-Raboso для утонченного RegEx !

+0

Отлично работает, спасибо! –

+1

'r '\ d {5}'' дает ложные срабатывания (например: '11231asdf',' asdf11231', 'as11231df'). Вы хотите более строгое регулярное выражение: 'r '^ \ d {5} $'' –

+0

@ AlbertoGarcia-Raboso, спасибо! Я обновил свой ответ – MaxU

Смежные вопросы