Kódím.cz
2

Regulární výrazy

Ovládneme regulární výrazy, které nám umožní dělat kouzla při dolování dat z textů.

Regulární výrazy v Pandas

Regulární výrazy můžeme využívat i v modulu Pandas. Uvažujme, že máme lékařské zprávy uložené v souboru zpravy.csv. Zkusme si soubor stáhnout a nahrát jako tabulku v Pandas.

import pandas

df = pandas.read_csv("zpravy.csv", sep=";")

Jako první vyzkoušíme metodu str.contains(), která ověří, zda je ve sloupci skupina znaků, která odpovídá regulárnímu výrazu. Můžeme tedy například zkontrolovat, zda je ve sloupci zapis skupina znaku, která odpovídá rodnému číslu.

df["obsahuje_rodne_cislo"] = df["zapis"].str.contains(r"\d{9,10}")

Komplexnější informací je počet rodných čísel, která jsou v zápise zmíněna. K jeho získání můžeme použít metodu str.count(), která vrátí počet skupin znaků, které odpovídají regunárnímu výrazu, jako celé číslo.

df["pocet_rodnych_cisel"] = df["zapis"].str.count(r"\d{9,10}")

Pokud chceme rodná čísla vyhledat, můžeme použít metodu findall(). Ta vrátí všechny skupiny znaků, které odpovídají regulárnímu výrazu. Protože takových skupin může být více, vloží metoda jednotlivé nalezené řetězce do seznamu.

df["rodna_cisla"] = df["zapis"].str.findall(r"\d{9,10}")

Zápisy můžeme též anonymizovat, k tomu využijeme metodu str.replace().

df["anonymni_zapis"] = df["zapis"].str.replace(r"\d{9,10}", "XXX")

A provádět můžeme i kontrolu formátu, k tomu slouží dvojice metod str.match() a str.fullmatch(). Rozdíl v nich je stejný jako u stejnojmenných funkcí modulu re - první stačí, že regulární výraz se shoduje s začátkem řetězce, druhá kontroluje celý řetězec a nesmí tam tedy být nic navíc.

df["datum_ok"] = df["datum"].str.match(r"\d{4}-\d{2}-\d{2}")