Python: применить регулярное выражение для кадра данных с датой и временем в виде столбца - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть датафрейм (df) следующим образом

Index     Month     Time       Text_1          Text_2                 Text_3
  0      02/2019   19:44:33   aadd@34:9984    (none)\       62fa6297-f5f5-4c47-8236-4a85cad5e601
                                             STBROWN2-M-26YQ
  1      02/2019   19:30:22   58:EF:68:14    (none)\        f933fb2a-4dde-a547-80ca-3b9e6cd29a6d
                                             STBROWN2-M-26YQ

Я написал простое регулярное выражение следующим образом

def clean(text):
text = text.lower()
text_clean = re.sub('[^A-Za-z0-9]', ' ', text)
return text_clean

Затем я применяю вышеприведенное к df

df.apply(lambda x : clean(x))

Я получаю следующую ошибку:

AttributeError: ("'Series' object has no attribute 'lower'", 'occurred at index Application')

Это может быть из-за столбцов Month и Time, поскольку они являются datetime объектом.

Мой вопрос: как применить регулярное выражение, игнорируя дату и время?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

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

def clean(text):
    text = text.str.lower()
    text_clean = text.str.replace('[^A-Za-z0-9]', ' ', regex = True)
    return text_clean
df.assign(**df.filter(like = 'Text').apply(clean))
0 голосов
/ 28 февраля 2019

В ваших данных я думаю, что все данные являются строками, но если вы хотите исключить столбцы datetime, используйте select_dtypes:

def clean(text):
    return text.str.lower().str.replace('[^A-Za-z0-9]', '')

#filter only object columns
mask = df.dtypes == 'object'
#filter Text columns if possible
#mask = df.columns.startswith('Text')

df.loc[:, mask] = df.loc[:, mask].apply(clean)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...