7.1. Konwertowanie ciągu tekstowego na datę

# Wczytanie bibliotek.
import numpy as np
import pandas as pd

# Utworzenie ciągów tekstowych.
date_strings = np.array(['03-04-2005 11:35 PM',
                         '23-05-2010 12:01 AM',
                         '04-09-2009 09:09 PM'])

# Konwersja na postać daty i godziny.
[pd.to_datetime(date, format='%d-%m-%Y %I:%M %p') for date in date_strings]

[Timestamp('2005-04-03 23:35:00'),
 Timestamp('2010-05-23 00:01:00'),
 Timestamp('2009-09-04 21:09:00')]





# Konwersja na postać daty i godziny.
[pd.to_datetime(date, format="%d-%m-%Y %I:%M %p", errors="coerce")
for date in date_strings]

[Timestamp('2005-04-03 23:35:00'),
 Timestamp('2010-05-23 00:01:00'),
 Timestamp('2009-09-04 21:09:00')]





7.2. Obsługa stref czasowych

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie obiektu daty i godziny.
pd.Timestamp('2017-05-01 06:00:00', tz='Europe/London')

Timestamp('2017-05-01 06:00:00+0100', tz='Europe/London')





# Utworzenie obiektu daty i godziny.
date = pd.Timestamp('2017-05-01 06:00:00')

# Zdefiniowanie strefy czasowej.
date_in_london = date.tz_localize('Europe/London')

# Wyświetlenie daty i godziny.
date_in_london

Timestamp('2017-05-01 06:00:00+0100', tz='Europe/London')





# Zmiana strefy czasowej.
date_in_london.tz_convert('Africa/Abidjan')

Timestamp('2017-05-01 05:00:00+0000', tz='Africa/Abidjan')





# Utworzenie trzech dat.
dates = pd.Series(pd.date_range('2/2/2002', periods=3, freq='M'))

# Zdefiniowanie strefy czasowej.
dates.dt.tz_localize('Africa/Abidjan')

0   2002-02-28 00:00:00+00:00
1   2002-03-31 00:00:00+00:00
2   2002-04-30 00:00:00+00:00
dtype: datetime64[ns, Africa/Abidjan]





# Wczytanie biblioteki.
from pytz import all_timezones

# Wyświetlenie dwóch pierwszych stref czasowych.
all_timezones[0:2]

['Africa/Abidjan', 'Africa/Accra']





7.3. Pobieranie daty i godziny

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie obiektu typu DataFrame.
dataframe = pd.DataFrame()

# Utworzenie obiektów daty i godziny.
dataframe['date'] = pd.date_range('1/1/2001', periods=100000, freq='H')

# Pobranie obserwacji znajdujących się między dwiema datami.
dataframe[(dataframe['date'] > '2002-1-1 01:00:00') &
          (dataframe['date'] <= '2002-1-1 04:00:00')]





# Zdefiniowanie indeksu.
dataframe = dataframe.set_index(dataframe['date'])

# Pobranie obserwacji znajdujących się między dwiema datami.
dataframe.loc['2002-1-1 01:00:00':'2002-1-1 04:00:00']





7.4. Podział danych daty na wiele cech

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie obiektu typu DataFrame.
dataframe = pd.DataFrame()

# Utworzenie pięciu dat.
dataframe['date'] = pd.date_range('1/1/2001', periods=150, freq='W')

# Utworzenie cech dla roku, miesiąca, dnia, godziny i minuty.
dataframe['year'] = dataframe['date'].dt.year
dataframe['month'] = dataframe['date'].dt.month
dataframe['day'] = dataframe['date'].dt.day
dataframe['hour'] = dataframe['date'].dt.hour
dataframe['minute'] = dataframe['date'].dt.minute

# Wyświetlenie trzech wierszy.
dataframe.head(3)





7.5. Obliczanie różnicy między datami

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie obiektu typu DataFrame.
dataframe = pd.DataFrame()

# Utworzenie dwóch cech daty i godziny.
dataframe['Arrived'] = [pd.Timestamp('01-01-2017'), pd.Timestamp('01-04-2017')]
dataframe['Left'] = [pd.Timestamp('01-01-2017'), pd.Timestamp('01-06-2017')]

# Obliczenie ilości czasu między dwiema cechami.
dataframe['Left'] - dataframe['Arrived']

0   0 days
1   2 days
dtype: timedelta64[ns]





# Obliczenie ilości czasu między dwiema cechami.
pd.Series(delta.days for delta in (dataframe['Left'] - dataframe['Arrived']))

0    0
1    2
dtype: int64





7.6. Kodowanie dni tygodnia

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie dat.
dates = pd.Series(pd.date_range("2/2/2002", periods=3, freq="M"))

# Wyświetlenie dni tygodnia.
dates.dt.day_name()

0    Thursday
1      Sunday
2     Tuesday
dtype: object





# Wyświetlenie dni tygodnia.
dates.dt.weekday

0    3
1    6
2    1
dtype: int64





7.7. Tworzenie cechy opóźnionej w czasie

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie obiektu typu DataFrame.
dataframe = pd.DataFrame()

# Utworzenie danych.
dataframe["dates"] = pd.date_range("1/1/2001", periods=5, freq="D")
dataframe["stock_price"] = [1.1,2.2,3.3,4.4,5.5]

# Opóźnienie wartości o jeden wiersz.
dataframe["previous_days_stock_price"] = dataframe["stock_price"].shift(1)

# Wyświetlenie danych.
dataframe





7.8. Użycie okien upływającego czasu

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie obiektów daty i godziny.
time_index = pd.date_range("01/01/2010", periods=5, freq="M")

# Utworzenie obiektu typu DataFrame i zdefiniowanie indeksu.
dataframe = pd.DataFrame(index=time_index)

# Utworzenie cechy.
dataframe["Stock_Price"] = [1,2,3,4,5]

# Obliczenie średniej.
dataframe.rolling(window=2).mean()





7.9. Obsługa brakujących danych w serii danych zawierających wartości daty i godziny

# Wczytanie bibliotek.
import pandas as pd
import numpy as np

# Utworzenie daty.
time_index = pd.date_range("01/01/2010", periods=5, freq="M")

# Utworzenie obiektu typu DataFrame i zdefiniowanie indeksu.
dataframe = pd.DataFrame(index=time_index)

# Utworzenie cechy, w której brakuje wartości.
dataframe["Sales"] = [1.0,2.0,np.nan,np.nan,5.0]

# Interpolacja brakujących wartości.
dataframe.interpolate()





# Wypełnienie do przodu.
dataframe.ffill()





# Wypełnienie wstecz.
dataframe.bfill()





# Interpolacja brakujących wartości.
dataframe.interpolate(method="quadratic")





# Interpolacja brakujących wartości.
dataframe.interpolate(limit=1, limit_direction="forward")
