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ě.