Regex (или другой python параметр pref. pandas) для соответствия всем нецифровым периодам, НО, плюс и минус (., +, -) - PullRequest
1 голос
/ 23 апреля 2020

Я видел много похожих вопросов, но ни один не решил эту проблему.

df = pd.DataFrame()
df['dummy'] = ['gg-21.534wgtr..eu678+ithn']

Я хотел бы получить,

-21.534..678+

Я хочу на самом деле удалить эти символы, поэтому моя попытка,

df['dummy'].astype(str).str.replace(r'\D+','')

21534678

не работает.

регулярное выражение будет моим первым выбором, в противном случае любая альтернатива pandas из любой альтернативы python.

Ответы [ 4 ]

2 голосов
/ 23 апреля 2020

Вы должны использовать

df['dummy'] = df['dummy'].astype(str).str.replace(r'[^\d.+-]+', '')

См. Демонстрационный пример regex .

Метод pandas равен Series.str.replace, чтобы найти и заменить совпадения другой строкой ( пустая, поскольку вы удаляете совпадения).

Нужный вам шаблон: [^\d.+-]+, отрицательный класс символов , который соответствует любому символу, 1 или более вхождения, кроме di git, ., + или -. Обратите внимание на позицию -, она должна находиться в начале или конце класса символов, чтобы считаться буквальным символом -, иначе это создаст диапазон.

2 голосов
/ 23 апреля 2020

Я не уверен, что gr asp ваш вопрос, но это даст мне запрошенный вывод из вашего примера:

import re
reg_exp = re.compile("([0-9+\-.,]+)")

string = 'gg-21.534wgtr..eu678+ithn'
res = reg_exp.findall(string)
print(''.join(res))
2 голосов
/ 23 апреля 2020

Вы можете достичь этого с помощью python re

Объяснение:

\d+ (любые цифры)

| (или)

\.+ (любой . любой длины)

| (или)

\+ (любой одиночный + >> добавить +, чтобы создать его любая длина \++)

| (или)

\- (любая единица - >> добавить + для любой длины \--)

import pandas as pd
import re
pattern = r'\d+|\.+|\+|\-'
df = pd.DataFrame()
df['dummy'] = [''.join(re.findall(pattern, 'gg-21.534wgtr..eu678+ithn'))]

print(df)

         dummy
0  21.534..678+
0 голосов

Я не мастер регулярных выражений, но мое первое решение будет

[^ \ d + - \.]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...