Найти тему
Властелин машин

Обработка строковых полей в Pandas

Оглавление

Задача обработки строковых полей в объектах Pandas решается с помощью векторизованных строковых операций и методов доступа к отдельным элементам таблицы (см. статью).

Например, пусть перед нами стоит задача очистки значений столбцов улица, дом и преобразования их к виду улица;дом из следующей таблицы:

-2

Чистка посредством строковых операций

Для очистки соответствующих столбцов можно через свойство 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 выведем типы представленных в таблице столбцов:

-3

Как можно увидеть, типом нашего столбца  является object. В отличие от указанных выше векторизованных операций при поэлементной обработке значений (метод map) сначала потребуется привести тип столбца к строковому:

df_flat_age['общая площадь(кв.м.)']= df_flat_age['общая площадь(кв.м.)'].astype(str)
Затем для каждого элемента вызываем функцию очистки от шаблона (удаляет все кроме точки и цифр):

pat = re.compile(r'[^0-9\.]')

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)