Преобразование строкового значения в диапазон

Есть объект Dataframe считанный из загруженного csv файла по ссылке:

https://data.gov.ru/opendata/7708660670-rodnik-neskuchniy-sad/data-20160608T1215-structure-20160608T1215.csv

df = pd.read_csv("Химический анализ родника в Нескучном саду.csv", sep=',')

df

введите сюда описание изображения

Задача - добавить столбец, который сравнивает данные из столбца Результат анализа со столбцом Норматив. Для этого очищаю столбец Норматив для дальнейшей работы.

df["Res"] = df["Норматив"].str.replace(r"в пределах", "", regex=True)
df["Res"] = df["Res"].str.replace(r"не более", "", regex=True)
df

А дальше не понимаю как двигаться: что делать со значениями с дефисом (напр. 6-9), есть ли способ перевести их в диапазон и проверять входит ли результат анализа в этот диапазон?


Ответы (1 шт):

Автор решения: Алексей Р

На коленке, но как-то так

pd.options.display.width = None
df = pd.read_csv("Химический анализ родника в Нескучном саду.csv", sep=',')
# нормализация
df["Res"] = df["Норматив"].str.replace(r"в пределах (\d+)-(\d+)", r"\1:\2", regex=True).str.replace(r"не более.+?(\d+,?\d*)$", r"0:\1", regex=True)
df['Результат анализа'] = df['Результат анализа'].replace('б/цвета', '0')
# формирование верхней и нижней границ
df[['lower', 'upper']] = df["Res"].str.replace(',', '.').str.extract(r'(.*):(.*)')
# формирование выводов
df['Норма'] = df['Результат анализа'].astype(float).between(df.lower.astype(float), df.upper.astype(float))
print(df)
                               Показатель Единица измерений  Результат анализа         Норматив     Res lower upper  Норма
0                                      pH        единицы pH                8.4   в пределах 6-9     6:9     6     9   True
1                                   Запах             баллы                  1     не более 2-3     0:3     0     3   True
2                               Цветность           градусы                  0      не более 30    0:30     0    30   True
3                               Жёсткость       мг-эквл/дм3  9.199999999999999  в пределах 7-10    7:10     7    10   True
4         Аммиак и аммоний-ион (по азоту)            мг/дм3               0.42     не более 1,5   0:1,5     0   1.5   True
5                        Нитриты (по NO2)            мг/дм3              0.017     не более 3,3   0:3,3     0   3.3   True
6                        Нитраты (по NO3)            мг/дм3                 24      не более 45    0:45     0    45   True
7                             Фосфаты (P)            мг/дм3               0.36     не более 3,5   0:3,5     0   3.5   True
8                            Хлориды (Cl)            мг/дм3                200     не более 350   0:350     0   350   True
9                          Сульфаты (SO4)            мг/дм3              189.5     не более 500   0:500     0   500   True
10  Железо (включая хлорное железо) по Fe            мг/дм3              0.019     не более 0,3   0:0,3     0   0.3   True
11                                  Нефть            мг/дм3               0.55     не более 0,3   0:0,3     0   0.3  False
12    Общая минерализация (сухой остаток)            мг/дм3                590    не более 1000  0:1000     0  1000   True
13            Окисляемость перманганатная            мг/дм3                  2     не более 0,5   0:0,5     0   0.5  False
→ Ссылка