Хотите отделить целые и числа с плавающей точкой от столбца с различными строками в нем - PullRequest
1 голос
/ 20 сентября 2019

Я пытаюсь извлечь только целые числа и числа с плавающей точкой из столбца строки, которую я пробовал data['new'] = data['text'].str.extract(r'^\d+\.\d+$')

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Если нужно, извлеките только числовые значения:

data = pd.DataFrame({'text':['20','45.45','ss4','7.4ds','dr']})
data['new'] = data['text'].str.extract(r'^(\d+\.\d+|\d+)$')
print (data)
    text    new
0     20     20
1  45.45  45.45
2    ss4    NaN
3  7.4ds    NaN
4     dr    NaN

Затем преобразуйте в числа с плавающей запятой:

data['new'] = data['text'].str.extract(r'^(\d+\.\d+|\d+)$').astype(float)
print (data)
    text    new
0     20  20.00
1  45.45  45.45
2    ss4    NaN
3  7.4ds    NaN
4     dr    NaN

Или используйте to_numeric функцию:

data['new'] = pd.to_numeric(data['text'], errors='coerce')
print (data)
    text    new
0     20  20.00
1  45.45  45.45
2    ss4    NaN
3  7.4ds    NaN
4     dr    NaN
0 голосов
/ 20 сентября 2019

Вам необходимо добавить группы захвата в ваше регулярное выражение.

Я предположил простейший случай, поскольку вы не предоставили ни одного примера ваших данных:

>> df
               text
0     green123apple
1  yellow45.6banana

Итак, вот новое регулярное выражение: "(\d+(?:\.\d+)?)"

Если мы разделим регулярное выражение, мы получим:

Часть ?: означает, что вы не хотите захватывать эту внутреннюю группу, вам не нужно получать десятичное числочасть в отдельной группе.Вы просто хотите получить целое число.

Вывод:

>> df["new"] = df["text"].str.extract("(\d+(?:\.\d+)?)")
>> df
               text   new
0     green123apple   123
1  yellow45.6banana  45.6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...