Преобразуйте содержимое строковых столбцов, следуя шаблону в Pandas Dataframe - PullRequest
1 голос
/ 05 марта 2020

У меня есть файл .csv, подобный приведенному ниже:

id                info1                                  info2             
1        abcd/145.7851548/1.png                  efgh/456.1425698/2.png
2        cbhy/558.4526988/3.png                  dhfy/786.8965245/4.png

Я хочу преобразовать оба столбца следующим образом:

id             info1                            info2             
1        abcd/51548/1.png                  efgh/25698/2.png
2        cbhy/26988/3.png                  dhfy/65245/4.png

Цель состоит в том, чтобы сохранить только последние 5 цифр пути посередине. Например, abcd / 145.78 51548 / 1.png (остается только выделенная часть). Может ли кто-нибудь сказать мне, как я могу этого достичь? Я пытался использовать pd.str.split , но, похоже, он не работает.

1 Ответ

3 голосов
/ 05 марта 2020

Попробуйте:

cols=["info1", "info2"]
df[cols]=df[cols].replace(r"(.*/).*(.{5}/.*)", r"\1\2", regex=True)

Выходы:

   id             info1             info2
0   1  abcd/51548/1.png  efgh/25698/2.png
1   2  cbhy/26988/3.png  dhfy/65245/4.png

По сути, регулярное выражение будет соответствовать фрагменту до первого слова sh включительно: (.*/) (из-за квадратных скобок) - группа 1).

Тогда для средней части - это будет соответствовать чему угодно (или ничему), затем ровно 5 символов, sla sh и снова - что угодно и ничего: .*(.{5}/.*). Имея снова в качестве группы (2) все, начиная с ровно 5 символов включительно.

Тогда все это будет заменено именно группой 1, за которой следует группа 2: \1\2.

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