Konwertowanie daty pd.to_datetime()

0
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import datetime as dt

df = pd.read_csv('HRDataset.csv')

#Zadanie 2 Jakie źródła pozyskania pracownika (Recruitment Source) są najlepsze, jeśli zależy nam na jak najdłuższym stażu pracowników?
import datetime as dt
df['DOB'] = pd.to_datetime(df['DOB'],format='%m/%d/%y')

def days(date,chk_y=dt.datetime(2019,9,27).year):
    return date.replace(year=date.year-100) if date.year > chk_y else date
df['DOB'] = pd.to_datetime(df['DOB'],format='%m/%d/%y').map(days)


df['DateofTermination'] = pd.to_datetime(df['DateofTermination'],format='%m/%d/%y')
df['DateofHire'] = pd.to_datetime(df['DateofHire'],format='%m/%d/%Y')

def seniority(row):

    if pd.isnull(row['DateofTermination']):
        end_date = dt.datetime(2019,9,27)
    else:
        end_date = row['DateofTermination']

    return (end_date - row['DateofHire'])/np.timedelta64(1,'Y')
df['Seniority'] = df.apply(lambda row: seniority(row),axis=1)

Ogólnie rzecz biorąc to mam powyższy kod , ale nie dokońca rozumiem co nie które rzeczy w tym kodzie. Najpierw jest ładowany plik .csv, potem są konwertowane daty df['DOB'].

Natomiast jak jest ta funkcja def days(date,chk_y=dt.datetime(2019,9,27).year) to nie kapuje co tu jest dokładnie zwracane? Poza tym trochę nie czaje skąd się bierze ta zmienna date?

Nie rozumiem o co w tym chodzi ?

return date.replace(year=date.year-100) if date.year > chk_y else date

poza tym jak jest

df['DOB'] = pd.to_datetime(df['DOB'],format='%m/%d/%y').map(days)

to co to jest to map(days)? wiem co jest days bo to wygląda na tą powyższa funkcje days(....).

Jakoś nie do końca rozumiem ten kod , jakby ktoś był wstanie mi to wytłumaczyć to byłoby fajnie.

45
date.replace(year=date.year-100) if date.year > chk_y else date

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.replace.html

Podmienia wartości w data, który jest prawdopodobnie DateFrame. W tym przypadku zwraca DateFrame (data) z podmienionym rokiem (rok - 100) gdy rok jest większy od sztywnego chk_y=dt.datetime(2019,9,27). W przeciwnym razie zwraca nieruszony DateFrame (date)

df['DOB'] = pd.to_datetime(df['DOB'],format='%m/%d/%y').map(days)
Tworzy nowy DataFrame. map przemiela kolekcje obiektów przez jakąś funkcje i zwraca kolekcje wyników. W tym przypadku jest to przeparsowanie na odpowiedni format.

0

Teraz kapuje co to jest chociaż trochę skomplikowane ,ale ok.

Powiesz mi jeszcze co robi ten warunek if pd.isnull(row['DateofTermination']) ?

44
dawid584 napisał(a):

Teraz kapuje co to jest chociaż trochę skomplikowane ,ale ok.

Powiesz mi jeszcze co robi ten warunek if pd.isnull(row['DateofTermination']) ?

def seniority(row):

    if pd.isnull(row['DateofTermination']):
        end_date = dt.datetime(2019,9,27)
    else:
        end_date = row['DateofTermination']

    return (end_date - row['DateofHire'])/np.timedelta64(1,'Y')

Sprawdza czy kolumna DateofTermination jest nullem. Na tej podstawie ustanawia wartość dla zmiennej end_date.

1 użytkowników online, w tym zalogowanych: 0, gości: 1