Обработка строковых полей в Pandas
Задача обработки строковых полей в объектах Pandas решается с помощью векторизованных строковых операций и методом доступа к отдельным элементам таблицы (см. статью).
Например, пусть перед нами стоит задача очистки значений столбцов улица, дом и преобразования их к виду улица;дом из следующей таблицы:
Чистка посредством строковых операций
Для очистки соответствующих столбцов можно через свойство str вызвать векторизованную операцию replace, заменяющую регулярный шаблон на пустое значение (подробнее см. статью):
df_flat_age['улица']=df_flat_age['улица'].str.replace('пер\.{0,1}','')
df_flat_age['улица']=df_flat_age['улица'].str.replace('/.*','')
df_flat_age['улица']=df_flat_age['улица'].str.replace('\(.*','')
df_flat_age['улица']=df_flat_age['улица'].str.replace('пр.','')
df_flat_age['улица']=df_flat_age['улица'].str.replace('Проспект','')
df_flat_age['улица'] = df_flat_age['улица'].str.strip()
df_flat_age['дом']=df_flat_age['дом'].str.strip()
df_flat_age['cl_adr']=df_flat_age['улица']+';'+df_flat_age['дом']
Обработка строк посредством доступа к отдельным элементам
Теперь на примере операции приведения столбца «общая площадь(кв.м.)» к типу с плавающей точкой рассмотрим пример вызова функции обработки отдельных элементов (см. статью).
Сначала посредством метода dtypes выведем типы представленных в таблице столбцов:
Как можно увидеть, типом нашего столбца является object. В отличие от указанных выше векторизованных операций при поэлементной обработке значений (метод map) сначала потребуется привести тип столбца к строковому:
df_flat_age['общая площадь(кв.м.)']= df_flat_age['общая площадь(кв.м.)'].astype(str)
Затем для каждого элемента вызываем функцию очистки от шаблона (удаляет все кроме точки и цифр):
def square_clean(x,pat):
x = x.replace(',','.')
x = pat.sub('',x)
return x
df_flat_age['общая площадь(кв.м.)']= df_flat_age['общая площадь(кв.м.)'].map(lambda x: square_clean(x, pat))
Удаляем пустые значения и преобразовываем к типу с плавающей точкой:
df_flat_age = df_flat_age.drop(df_flat_age.loc[df_flat_age['общая площадь(кв.м.)']==''].index)
df_flat_age.loc[df_flat_age['общая площадь(кв.м.)'].notnull(), 'общая площадь(кв.м.)'] = df_flat_age.loc[df_flat_age['общая площадь(кв.м.)'].notnull(), 'общая площадь(кв.м.)'].astype(np.float32)
Не пропустите ничего интересного и подписывайтесь на страницы канала в других социальных сетях: