Atrisināts: pandas Timedelta līdz postgres

Datu analīzes pasaulē laikrindu datu apstrāde ir būtisks aspekts. Viena no šim nolūkam visbiežāk izmantotajām bibliotēkām ir **pandas** Python programmēšanas valodā. Izplatīts uzdevums, strādājot ar laikrindu datiem, ir laika atšķirības starp dažādiem notikumiem pārveidot standarta formātā. Šeit noder pandas Timedelta. Tomēr, strādājot ar tādām datu bāzēm kā PostgreSQL, šo timedeltas glabāšana var būt nedaudz sarežģīta. Šajā rakstā mēs apspriedīsim, kā pārvērst pandas Timedelta formātā, ko var saglabāt PostgreSQL, un izgūt to, vienlaikus saglabājot pareizu attēlojumu.

Problēmas risinājums

Šīs problēmas risinājums ietver pandas un psycopg2 bibliotēku izmantošanu, kuras tiek plaši izmantotas attiecīgi datu manipulācijām un PostgreSQL datu bāzes pārvaldībai. Psycopg2 bibliotēkā ir atbalsts timedeltas apstrādei, izmantojot PostgreSQL datu tipu "intervāls". Mēs izmantosim šo funkciju, lai mūsu pandas Timedelta saglabātu PostgreSQL un izgūtu to atpakaļ pareizajā formātā.

Vispirms importēsim nepieciešamās bibliotēkas un izveidosim savienojumu ar mūsu PostgreSQL datu bāzi.

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 un PostgreSQL intervāls

pandas Timedelta ir spēcīgs rīks, lai konsekventi un lasāmā veidā izteiktu laika atšķirības. Pandās ir viegli izveidot un manipulēt ar timedelta objektiem, taču, ja runa ir par to glabāšanu PostgreSQL datu bāzē, mums tie ir jāpārvērš atbilstošā formātā.

PostgreSQL piedāvā datu tipu "intervāls", lai saglabātu laika intervālus. Šis datu veids var attēlot laika posmu dažādās precizitātēs, piemēram, dienās, stundās, minūtēs un sekundēs. Lai saglabātu pandas Timedelta PostgreSQL datu bāzē, mums tas ir jāpārvērš PostgreSQL intervālā.

Izveidosim paraugu pandas DataFrame ar Timedelta kolonnu:

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)

Tagad izveidosim funkciju, lai ievietotu šos datus mūsu PostgreSQL datu bāzē un pārveidotu Timedelta datus ar PostgreSQL saderīgā intervālā.

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

Izmantojot šo funkciju, mēs varam ievietot mūsu pandas DataFrame datus PostgreSQL datu bāzē:

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

Timedeltas izguve no PostgreSQL

Kad pandas Timedelta dati tiek saglabāti PostgreSQL kā intervāli, mēs varam tos viegli izgūt un pārvērst atpakaļ pandas Timedeltas datu lasīšanas laikā.

Izveidosim funkciju datu iegūšanai no mūsu PostgreSQL tabulas:

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

Izmantojot šo funkciju, mēs varam iegūt un izdrukāt datus no mūsu PostgreSQL datu bāzes:

result = fetch_data(conn)
print(result)

Datiem, kas iegūti no PostgreSQL, Timedeltas tagad ir pareizi attēlotas kā pandas Timedeltas.

Visbeidzot, pandas Timedelta konvertēšana formātā, kas piemērots PostgreSQL krātuvei, un tās izgūšana sākotnējā formā ir vienkāršs process. Izmantojot jaudīgās pandas un psycopg2 bibliotēkas, mēs varam viegli apstrādāt laikrindu datus un uzturēt to pareizu attēlojumu gan datu analīzē, gan datu bāzē.

Related posts:

Leave a Comment