Lahendatud: pandad Timedelta kuni postgres

Andmeanalüüsi maailmas on aegridade andmete käsitlemine ülioluline aspekt. Üks kõige sagedamini kasutatavaid teeke sel eesmärgil on Pythoni programmeerimiskeeles **pandas**. Levinud ülesanne aegridade andmetega töötamisel on erinevate sündmuste ajaerinevuse teisendamine standardvormingusse. Siin tuleb appi pandad Timedelta. Kuid selliste andmebaasidega nagu PostgreSQL töötades võib nende ajadeltade salvestamine olla pisut keeruline. Selles artiklis käsitleme, kuidas teisendada pandade Timedelta vormingusse, mida saab PostgreSQL-is salvestada, ja seda laadida, säilitades samal ajal selle õige esituse.

Probleemi lahendus

Selle probleemi lahendus hõlmab pandade ja psycopg2 teekide kasutamist, mida kasutatakse laialdaselt andmete töötlemiseks ja PostgreSQL-i andmebaasi haldamiseks. Psycopg2 teek toetab ajadeltade käsitlemist, kasutades PostgreSQL-i andmetüüpi intervall. Kasutame seda funktsiooni oma pandade Timedelta salvestamiseks PostgreSQL-i ja laadime selle õiges vormingus tagasi.

Esmalt impordime vajalikud teegid ja loome ühenduse oma PostgreSQL-i andmebaasiga.

import pandas as pd
import psycopg2

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

panda Timedelta ja PostgreSQL intervall

panda Timedelta on võimas tööriist ajaerinevuste järjepidevaks ja loetaval viisil väljendamiseks. Timedelta objekte on pandades lihtne luua ja nendega manipuleerida, kuid kui on vaja neid PostgreSQL-i andmebaasi salvestada, peame need sobivasse vormingusse teisendama.

PostgreSQL pakub ajavahemike salvestamiseks andmetüüpi "intervall". See andmetüüp võib kujutada ajavahemikku erinevates detailides, nagu päevad, tunnid, minutid ja sekundid. Panda Timedelta salvestamiseks PostgreSQL-i andmebaasi peame selle teisendama PostgreSQL-intervalliks.

Loome näidispandade DataFrame'i Timedelta veeruga:

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)

Nüüd loome funktsiooni nende andmete sisestamiseks meie PostgreSQL-i andmebaasi ja Timedelta andmete teisendamiseks PostgreSQL-iga ühilduvaks intervalliks.

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

Seda funktsiooni kasutades saame sisestada oma panda DataFrame'i andmed PostgreSQL-i andmebaasi:

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

Timedeltase hankimine PostgreSQL-ist

Kui pandade Timedelta andmed on PostgreSQL-is intervallidena salvestatud, saame need hõlpsalt hankida ja andmete lugemise ajal uuesti pandade Timedeltadeks teisendada.

Loome funktsiooni PostgreSQL-i tabelist andmete toomiseks:

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

Selle funktsiooni abil saame oma PostgreSQL-i andmebaasist andmeid tuua ja printida:

result = fetch_data(conn)
print(result)

PostgreSQL-ist hangitud andmetel on nüüd oma Timedeltas õigesti esitatud pandade Timedeltasena.

Kokkuvõtteks võib öelda, et pandade Timedelta teisendamine PostgreSQL-i salvestamiseks sobivasse vormingusse ja selle algsel kujul allalaadimine on lihtne protsess. Võimsate pandade ja psycopg2 teekide abil saame hõlpsalt käsitseda aegridade andmeid ja säilitada nende õige esituse nii oma andmeanalüüsis kui ka andmebaasi salvestamisel.

Seonduvad postitused:

Jäta kommentaar