Doplňování prázdných hodnot v Pythonu (pandas)
S tímto tématem se setkáte na našich kurzech ExcelTown.
Aktuálně: kurzy můžete absolvovat jak online, tak prezenčně.
Autor: Miroslav Kozel
Určitě jste někdy potřebovali doplnit chybějící hodnoty v nějaké časové řadě.
Příkladem mohou být měnové kurzy - ty se běžně nevyhlašují na víkend, ale vy je můžete potřebovat i pro sobotu a neděli. Takže je potřebujete získat z předchozího dne nebo jinak.
V SQL nebo v Excelu je potřeba se trochu zamyslet nad tím, jak si s tím poradit a je s tím i trochu práce.
S Pandas je to otázka zavolání dvou funkcí na dataframe.
A můžete si snadno vybrat – je libo díry vyplnit předchozí hodnotou? Nebo lineárně časově interpolovat?
Díky řetězení volání funkcí je to otázka jednoho řádku kódu.
Vyjdeme z tabulky, kde chybí hodnoty:
Kurz USD | |
---|---|
Datum | |
2022-01-03 | 21.860 |
2022-01-04 | 21.944 |
2022-01-05 | 21.739 |
2022-01-06 | 21.679 |
2022-01-07 | 21.626 |
2022-01-10 | 21.525 tady je díra v datech - chybí 8. a 9. |
2022-01-11 | 21.538 |
Doplnění shora dolů
Dny doplníme takto funkcí asfreg
- kurz.asfreq('D').fillna(method = 'ffill').head(7)
Protože:
- D - znamená že se pracují na úrovni jednotlivých dní (ne třeba měsíců)
- ffill - definuje doplňování shora dolů
Výsledek bude takto, přibyly nové dny a jsou vyplněné předchozí hodnotou:
Kurz USD | |
---|---|
Datum | |
2022-01-03 | 21.860 |
2022-01-04 | 21.944 |
2022-01-05 | 21.739 |
2022-01-06 | 21.679 |
2022-01-07 | 21.626 |
2022-01-08 | 21.626 - doplněny předchozí hodnoty |
2022-01-09 | 21.626 |
Interpolace
A co kdybyste chtěli hodnoty z předchozích řádků ne jen vyplnit, ale interpolovat?
Pak bude zápis a výsledek např. takto:
- kurz.asfreq('D').interpolate('time').head(7)
Kurz USD | |
---|---|
Datum | |
2022-01-03 | 21.860000 |
2022-01-04 | 21.944000 |
2022-01-05 | 21.739000 |
2022-01-06 | 21.679000 |
2022-01-07 | 21.626000 |
2022-01-08 | 21.592333 - interpolovaná hodnoty z předchozího |
2022-01-09 | 21.558667 |
S tímto tématem se setkáte na našich kurzech ExcelTown.
Aktuálně: kurzy můžete absolvovat jak online, tak prezenčně.