Riješeno: pandas Timedelta u postgres

U svijetu analize podataka, rukovanje podacima vremenskih serija ključni je aspekt. Jedna od najčešće korištenih biblioteka u tu svrhu je **pandas** u programskom jeziku Python. Uobičajeni zadatak pri radu s vremenskim serijama podataka je pretvaranje vremenskih razlika između različitih događaja u standardni format. Ovdje pande Timedelta dobro dolaze. Međutim, kada radite s bazama podataka kao što je PostgreSQL, pohranjivanje ovih vremenskih delta može biti malo nezgodno. U ovom ćemo članku raspravljati o tome kako pretvoriti pandas Timedelta u format koji se može pohraniti u PostgreSQL i dohvatiti ga uz zadržavanje njegovog ispravnog prikaza.

Rješenje problema

Rješenje ovog problema uključuje korištenje knjižnica pandas i psycopg2, koje se naširoko koriste za manipulaciju podacima odnosno upravljanje PostgreSQL bazom podataka. Biblioteka psycopg2 ima podršku za rukovanje timedeltas, koristeći tip podataka `interval` u PostgreSQL-u. Iskoristit ćemo ovu značajku za pohranjivanje naše pande Timedelta u PostgreSQL i dohvaćanje je natrag u ispravnom formatu.

Prvo, uvezimo potrebne biblioteke i uspostavimo vezu s našom PostgreSQL bazom podataka.

import pandas as pd
import psycopg2

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

pandas Timedelta i PostgreSQL Interval

pandas Timedelta moćan je alat za izražavanje vremenskih razlika na dosljedan i čitljiv način. Lako je stvoriti i manipulirati timedelta objektima u pandama, ali kada je u pitanju njihovo pohranjivanje u PostgreSQL bazu podataka, moramo ih pretvoriti u odgovarajući format.

PostgreSQL nudi tip podataka `interval` za pohranu vremenskih intervala. Ova vrsta podataka može predstavljati vremenski raspon u različitim granularnostima, kao što su dani, sati, minute i sekunde. Kako bismo pohranili pandas Timedelta u PostgreSQL bazu podataka, moramo je pretvoriti u PostgreSQL interval.

Kreirajmo ogledni pandas DataFrame sa stupcem Timedelta:

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)

Kreirajmo sada funkciju za umetanje ovih podataka u našu PostgreSQL bazu podataka i pretvaranje podataka Timedelta u interval kompatibilan s PostgreSQL.

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()

Koristeći ovu funkciju, možemo umetnuti naše pandas DataFrame podatke u PostgreSQL bazu podataka:

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

Dohvaćanje Timedeltas iz PostgreSQL

Nakon što se podaci pandas Timedelta pohrane u PostgreSQL kao intervali, možemo ih lako dohvatiti i pretvoriti natrag u pandas Timedelta dok čitamo podatke.

Kreirajmo funkciju za dohvaćanje podataka iz naše PostgreSQL tablice:

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

Pomoću ove funkcije možemo dohvatiti i ispisati podatke iz naše PostgreSQL baze podataka:

result = fetch_data(conn)
print(result)

Podaci dohvaćeni iz PostgreSQL-a sada imaju svoje Timedeltas ispravno predstavljene kao pandas Timedeltas.

Zaključno, pretvaranje pandas Timedelta u format prikladan za PostgreSQL pohranu i njegovo dohvaćanje u izvornom obliku je jednostavan proces. Iskorištavanjem moćnih biblioteka pandas i psycopg2, možemo jednostavno rukovati podacima o vremenskim serijama i održavati njihov ispravan prikaz, kako u našoj analizi podataka, tako i u našoj pohrani baze podataka.

Povezani postovi:

Ostavite komentar