регулярное выражение замены нескольких кодов значениями в столбце - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть датафрейм (df) с разными столбцами.Один из столбцов (col1) выглядит следующим образом:

    col1
    ----
0   1
1   2
2   1-2
3   1,2
4   1-3
5   3

Я использую метод .replace в python / pandas для замены кодов в col1 с помощью кода:

 df.col1.replace(to_replace=({'1':'Normal','2':'1-2 more than normal','3':'3-4 more than normal'}), regex=True)

IЯ использую regex=True, потому что в ячейках есть коды типа 1-2, где значения 1 и 2 имеют разные значения, как указано в словаре.

Выходные данные

    col1
    --------
0   Normal
1   1-2 more than normal
2   Normal-1-2 more than normal
3   Normal,1-2 more than normal
4   Normal-1-2 more than normal-3 more than normal
5   1-2 more than normal-3 more than normal

Желаемый вывод

    col1
    --------
0   Normal
1   1-2 more than normal
2   Normal-1-2 more than normal
3   Normal,1-2 more than normal
4   Normal-3-4 more than normal
5   3-4 more than normal

Проблема:

Если я не рассматриваю четвертую строку (1-3), тогда все кодызаменен правильно, за исключением кода 3. Далее я экспериментировал с добавлением строки только с кодом 3, и там я обнаружил, что регулярное выражение сначала заменяет значения для кода 3, а затем в этих значениях заменяет коды значениями из словаря.

Странно, так как я запускаю код / ​​команду регулярного выражения только один раз.

Одним из решений является то, что вместо использования чисел в значениях словаря я мог бы использовать английские слова, например, вместо ввода 1-2 more than normal, я могу написать one-two more than normal, и тогда это сработает.Но я хочу сохранить цифры, так как их легко интерпретировать.

Есть предложения?

1 Ответ

0 голосов
/ 09 ноября 2018

Повторение вашей работы. Кажется, я не получаю ту же ошибку, что и вы, при вводе

df = pd.DataFrame({'col1' : ['1', '2', '1-2', '1,2', '1-3', '3']})

и применении того же метода .replace:

df.col1.replace(to_replace=({'1':'Normal','2':'1-2 more than normal','3':'3-4 more than normal'}), regex=True)

Мой вывод соответствует вашему желаемому выводу

Вывод:

    col1
    ---------
0   Normal
1   1-2 more than normal
2   Normal-1-2 more than normal
3   Normal,1-2 more than normal
4   Normal-3-4 more than normal
5   3-4 more than normal

Так что я не вижу никаких проблем.

Кроме этогохотя я бы подумал, что вы делаете здесь, и насколько читабелен вывод.Если вы оцениваете каждое значение по заранее определенным пределам, почему бы не создать еще один столбец с меткой для каждой строки, указывающей, к какой группе классификации он относится?Надеюсь, это поможет!

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