Rešeno: pandas Timedelta v postgres

V svetu analize podatkov je ravnanje s podatki časovnih vrst ključni vidik. Ena najpogosteje uporabljenih knjižnic za ta namen je **pandas** v programskem jeziku Python. Pogosta naloga pri delu s podatki časovne vrste je pretvorba časovnih razlik med različnimi dogodki v standardno obliko. Tukaj pride prav panda Timedelta. Vendar pa je pri delu z bazami podatkov, kot je PostgreSQL, shranjevanje teh časovnih delt lahko nekoliko težavno. V tem članku bomo razpravljali o tem, kako pretvoriti pandas Timedelta v obliko, ki jo je mogoče shraniti v PostgreSQL, in jo pridobiti, pri tem pa ohraniti pravilno predstavitev.

Rešitev problema

Rešitev te težave vključuje uporabo knjižnic pandas in psycopg2, ki se pogosto uporabljajo za manipulacijo s podatki oziroma upravljanje baze podatkov PostgreSQL. Knjižnica psycopg2 ima podporo za ravnanje s časovnimi deltami z uporabo podatkovnega tipa `interval` v PostgreSQL. To funkcijo bomo izkoristili za shranjevanje naše pande Timedelta v PostgreSQL in jo pridobili nazaj v pravilni obliki.

Najprej uvozimo potrebne knjižnice in vzpostavimo povezavo z našo bazo podatkov PostgreSQL.

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 in PostgreSQL Interval

pandas Timedelta je močno orodje za izražanje časovnih razlik na dosleden in berljiv način. V pandah je enostavno ustvariti in manipulirati objekte timedelta, ko pa jih želimo shraniti v zbirko podatkov PostgreSQL, jih moramo pretvoriti v ustrezno obliko.

PostgreSQL ponuja podatkovni tip `interval` za shranjevanje časovnih intervalov. Ta podatkovni tip lahko predstavlja časovno obdobje v različnih podrobnostih, kot so dnevi, ure, minute in sekunde. Da bi shranili pandas Timedelta v bazo podatkov PostgreSQL, jo moramo pretvoriti v interval PostgreSQL.

Ustvarimo vzorčni pandas DataFrame s stolpcem 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)

Zdaj pa ustvarimo funkcijo za vstavljanje teh podatkov v našo bazo podatkov PostgreSQL in pretvorbo podatkov Timedelta v interval, združljiv 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()

S to funkcijo lahko vstavimo naše podatke pandas DataFrame v bazo podatkov PostgreSQL:

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

Pridobivanje časovnih delt iz PostgreSQL

Ko so podatki pandas Timedelta shranjeni v PostgreSQL kot intervali, jih lahko preprosto pridobimo in pretvorimo nazaj v pandas Timedeltas med branjem podatkov.

Ustvarimo funkcijo za pridobivanje podatkov iz naše tabele PostgreSQL:

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

S to funkcijo lahko pridobimo in natisnemo podatke iz naše baze podatkov PostgreSQL:

result = fetch_data(conn)
print(result)

Podatki, pridobljeni iz PostgreSQL, imajo zdaj svoje časovne delte pravilno predstavljene kot pande časovne delte.

Skratka, pretvorba pandas Timedelta v obliko, primerno za shranjevanje v PostgreSQL, in njeno pridobivanje v izvirni obliki je preprost postopek. Z izkoriščanjem zmogljivih knjižnic pandas in psycopg2 lahko enostavno obdelujemo podatke o časovnih vrstah in vzdržujemo njihovo pravilno predstavitev, tako v naši analizi podatkov kot v shranjevanju podatkovne baze.

Podobni objav:

Pustite komentar