Megoldva: pandák Timedelta to postgres

Az adatelemzés világában az idősoros adatok kezelése döntő szempont. Az egyik leggyakrabban használt könyvtár erre a célra a **pandas** a Python programozási nyelvben. Az idősoros adatokkal való munka során gyakori feladat a különböző események közötti időkülönbségek szabványos formátumba konvertálása. Itt jön jól a Timedelta panda. Amikor azonban olyan adatbázisokkal dolgozik, mint a PostgreSQL, ezeknek az idődeltáknak a tárolása kissé bonyolult lehet. Ebben a cikkben megvitatjuk, hogyan lehet átalakítani a pandák Timedelta-ját PostgreSQL-ben tárolható formátumba, és lekérni, miközben megőrzi a helyes ábrázolást.

Megoldás a problémára

A probléma megoldása a pandas és a psycopg2 könyvtárak használatával jár, amelyeket széles körben használnak adatkezelésre, illetve PostgreSQL adatbázis-kezelésre. A psycopg2 könyvtár támogatja az idődelták kezelését, a PostgreSQL `intervall` adattípusát használva. Ezt a funkciót felhasználjuk pandáink Timedelta tárolására a PostgreSQL-ben, és visszakeressük a megfelelő formátumban.

Először is importáljuk a szükséges könyvtárakat, és hozzunk létre kapcsolatot a PostgreSQL adatbázisunkkal.

import pandas as pd
import psycopg2

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

pandák Timedelta és PostgreSQL Interval

pandas Timedelta egy hatékony eszköz az időeltérések következetes és olvasható módon történő kifejezésére. Pandákban könnyű timedelta objektumokat létrehozni és kezelni, de ha PostgreSQL adatbázisban kell tárolnunk őket, át kell alakítanunk őket a megfelelő formátumba.

A PostgreSQL az "intervallum" adattípust kínálja az időintervallumok tárolására. Ez az adattípus különböző részletességű időintervallumot jelenthet, például napokat, órákat, perceket és másodperceket. Ahhoz, hogy egy panda Timedelta-t PostgreSQL adatbázisban tárolhassunk, azt PostgreSQL intervallummá kell konvertálnunk.

Hozzunk létre egy minta panda DataFrame-et Timedelta oszloppal:

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)

Most hozzunk létre egy függvényt, amely beilleszti ezeket az adatokat a PostgreSQL adatbázisunkba, és konvertálja a Timedelta adatokat PostgreSQL-kompatibilis intervallummá.

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

Ezzel a funkcióval beilleszthetjük pandáink DataFrame adatait a PostgreSQL adatbázisba:

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

Timedeltas lekérése a PostgreSQL-ből

Miután a pandák Timedelta adatait a PostgreSQL-ben intervallumként tároltuk, könnyen lekérhetjük és visszakonvertálhatjuk pandák Timedeltasává az adatok olvasása közben.

Hozzunk létre egy függvényt az adatok lekéréséhez a PostgreSQL táblánkból:

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

Ezzel a funkcióval lekérhetjük és kinyomtathatjuk az adatokat PostgreSQL adatbázisunkból:

result = fetch_data(conn)
print(result)

A PostgreSQL-ből beolvasott adatok Timedeltasa már megfelelően panda Timedeltasként van ábrázolva.

Összegezve, a pandák Timedelta konvertálása a PostgreSQL tárolására alkalmas formátumba és az eredeti formában való visszakeresése egyszerű folyamat. A nagy teljesítményű pandák és psycopg2 könyvtárak kihasználásával könnyen kezelhetjük az idősoros adatokat és fenntarthatjuk azok megfelelő reprezentációját mind adatelemzésünkben, mind adatbázisunkban.

Kapcsolódó hozzászólások:

Írj hozzászólást