Skip to content

Commit 7049b98

Browse files
authored
Chybějící kapitola (#41)
* Chybějící kapitola * Chybějící soubor
1 parent 0375d3c commit 7049b98

File tree

3 files changed

+45
-0
lines changed

3 files changed

+45
-0
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
datum;zapis
2+
2022-04-25;Pacient 6407156800 trpěl bolestí zad a byl poslán na vyšetření.
3+
2022-04-25;Pacientka 8655057477 přišla na kontrolu po zranění kotníku.
4+
2022-04-26;Do ordinace telefonovala pacientka 7752126712, které byl elektronicky vydán recept na Paralen.
5+
2022-04-2X;Sourozencům 1210015895 a 0902112398 a rodiči 8011058253 byla vystavena žádanka na PCR test.

ziskavani-dat/regularni-vyrazy/entry.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ lead: Ovládneme regulární výrazy, které nám umožní dělat kouzla při do
33
sections:
44
- regularni-vyrazy
55
- python-re
6+
- regularni-vyrazy-pandas
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
## Regulární výrazy v Pandas
2+
3+
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](assets/zpravy.csv). Zkusme si soubor stáhnout a nahrát jako tabulku v Pandas.
4+
5+
```py
6+
import pandas
7+
8+
df = pandas.read_csv("zpravy.csv", sep=";")
9+
```
10+
11+
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.
12+
13+
```py
14+
df["obsahuje_rodne_cislo"] = df["zapis"].str.contains(r"\d{9,10}")
15+
```
16+
17+
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.
18+
19+
```py
20+
df["pocet_rodnych_cisel"] = df["zapis"].str.count(r"\d{9,10}")
21+
```
22+
23+
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.
24+
25+
```py
26+
df["rodna_cisla"] = df["zapis"].str.findall(r"\d{9,10}")
27+
```
28+
29+
Zápisy můžeme též anonymizovat, k tomu využijeme metodu `str.replace()`.
30+
31+
```py
32+
df["anonymni_zapis"] = df["zapis"].str.replace(r"\d{9,10}", "XXX")
33+
```
34+
35+
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.
36+
37+
```py
38+
df["datum_ok"] = df["datum"].str.match(r"\d{4}-\d{2}-\d{2}")
39+
```

0 commit comments

Comments
 (0)