Снимаем цифровую маску с Python
Как быстро убедиться в том, что в искомой колонке датафрейма находится числовое значение? В этой статье рассмотрим несколько приемов разделения мусора от цифровой информации.
Сначала сформируем синтетический набор:
import pandas as pd ser1 = pd.Series(['3', '5', '?']) ser2 = pd.Series(['-1.3', '?', '-5', 'some_str'])
Объекты ser1 и ser2 отличаются тем, что в первом случае такое разделение осуществить проще, так как необходимые нам значения являются положительными и целочисленными. Для демонстрации этого достаточно использовать строчный метод isdigit, который на примере ser1 дает положительный результат, а для ser2 - нет:
ser1[ser1.map(lambda x: not x.isdigit())] ser2[ser2.map(lambda x: not x.isdigit())]
Разберем приемы достижения нашей цели на примере ser2. Так, можно действовать по аналогии, с отличием в том, чтобы применить isdigit к очищенному значению (после удаления знаков "-" и "."):
ser2[ser2.str.replace(r'[.-]','', regex=True).map(lambda x:x.isdigit())]
Однако это вернет и строки вида "232-121":
В этой ситуации надежнее проверять на соответствие регулярному выражению:
import re ser2[ser2.str.contains(r'^-{0,1}[\d.]+#39;)]