Išspręsta: pandos Timedelta į postgres

Duomenų analizės pasaulyje laiko eilučių duomenų tvarkymas yra labai svarbus aspektas. Viena iš dažniausiai šiam tikslui naudojamų bibliotekų yra **pandas** Python programavimo kalba. Dažna užduotis dirbant su laiko eilučių duomenimis yra konvertuoti skirtingų įvykių laiko skirtumus į standartinį formatą. Čia praverčia pandos Timedelta. Tačiau dirbant su tokiomis duomenų bazėmis kaip „PostgreSQL“ saugoti šias laiko delsas gali būti šiek tiek sudėtinga. Šiame straipsnyje aptarsime, kaip konvertuoti pandas Timedelta į formatą, kuris gali būti saugomas PostgreSQL, ir gauti jį išlaikant teisingą atvaizdavimą.

Problemos sprendimas

Šios problemos sprendimas apima pandų ir psycopg2 bibliotekų naudojimą, kurios atitinkamai plačiai naudojamos duomenų apdorojimui ir PostgreSQL duomenų bazių valdymui. „Psycopg2“ biblioteka palaiko „timedeltas“ apdorojimą, naudojant „Interval“ duomenų tipą „PostgreSQL“. Mes panaudosime šią funkciją, norėdami išsaugoti pandas Timedelta į PostgreSQL ir atkurti ją tinkamu formatu.

Pirma, importuokime reikiamas bibliotekas ir užmegzkime ryšį su mūsų PostgreSQL duomenų baze.

import pandas as pd
import psycopg2

conn = psycopg2.connect(database="your_database",
                        user="your_user",
                        password="your_password",
                        host="your_host",
                        port="your_port")

pandos Timedelta ir PostgreSQL intervalas

pandas Timedelta yra galingas įrankis, leidžiantis nuosekliai ir skaitomai išreikšti laiko skirtumus. Pandose lengva kurti timedelta objektus ir jais manipuliuoti, bet kai reikia juos saugoti PostgreSQL duomenų bazėje, turime juos konvertuoti į atitinkamą formatą.

„PostgreSQL“ siūlo „intervalų“ duomenų tipą laiko intervalams saugoti. Šis duomenų tipas gali rodyti įvairių detalių laikotarpį, pvz., dienas, valandas, minutes ir sekundes. Norėdami išsaugoti pandą Timedelta PostgreSQL duomenų bazėje, turime ją konvertuoti į PostgreSQL intervalą.

Sukurkime pavyzdinį pandų duomenų rėmelį su Timedelta stulpeliu:

data = {'event_name': ['start', 'end'],
        'time': [pd.Timestamp('2021-01-01'), pd.Timestamp('2021-01-03')]}
df = pd.DataFrame(data)
df['difference'] = df['time'].diff()
print(df)

Dabar sukurkime funkciją įterpti šiuos duomenis į mūsų PostgreSQL duomenų bazę ir konvertuoti Timedelta duomenis į su PostgreSQL suderinamą intervalą.

def insert_data(event_name, time, difference, conn):
    query = """
    INSERT INTO timedeltas (event_name, time, difference)
    VALUES (%s, %s, %s)
    """
    with conn.cursor() as cur:
        cur.execute(query, (event_name, time, difference))
    conn.commit()

Naudodami šią funkciją galime įterpti savo pandos DataFrame duomenis į PostgreSQL duomenų bazę:

for _, row in df.iterrows():
    event_name, time, difference = row['event_name'], row['time'], row['difference']
    insert_data(event_name, time, difference, conn)

„Timedeltas“ gavimas iš „PostgreSQL“.

Kai pandų Timedelta duomenys yra saugomi PostgreSQL kaip intervalai, skaitydami duomenis galime juos lengvai nuskaityti ir konvertuoti atgal į pandas Timedeltas.

Sukurkime funkciją duomenims iš mūsų PostgreSQL lentelės gauti:

def fetch_data(conn):
    query = "SELECT event_name, time, difference FROM timedeltas"
    data = pd.read_sql(query, conn)
    data['difference'] = pd.to_timedelta(data['difference'])
    return data

Naudodami šią funkciją galime gauti ir spausdinti duomenis iš savo PostgreSQL duomenų bazės:

result = fetch_data(conn)
print(result)

Duomenys, gauti iš PostgreSQL, dabar turi savo Timedeltas tinkamai pavaizduotas kaip pandos Timedeltas.

Apibendrinant galima pasakyti, kad pandų Timedelta konvertavimas į formatą, tinkantį PostgreSQL saugyklai, ir jo nuskaitymas originalia forma yra nesudėtingas procesas. Naudodami galingas pandų ir psycopg2 bibliotekas, galime lengvai tvarkyti laiko eilučių duomenis ir išlaikyti tinkamą jų atvaizdavimą tiek analizuodami duomenis, tiek duomenų bazės saugykloje.

Susijusios naujienos:

Palikite komentarą