Решено: пандас Тимеделта у постгрес

У свету анализе података, руковање подацима временских серија је кључни аспект. Једна од најчешће коришћених библиотека за ову сврху је **пандас** у програмском језику Питхон. Уобичајени задатак при раду са подацима о временским серијама је претварање временских разлика између различитих догађаја у стандардни формат. Овде панде Тимеделта добро долазе. Међутим, када радите са базама података као што је ПостгреСКЛ, чување ових временских делта може бити мало незгодно. У овом чланку ћемо разговарати о томе како да конвертујете панде Тимеделта у формат који може да се складишти у ПостгреСКЛ-у и да га преузмете уз одржавање исправног приказа.

Решење проблема

Решење овог проблема подразумева коришћење панда и псицопг2 библиотека, које се широко користе за манипулацију подацима и ПостгреСКЛ управљање базом података. Библиотека псицопг2 има подршку за руковање временским делтама, користећи тип података `интервал` у ПостгреСКЛ-у. Искористићемо ову функцију да сачувамо наше панде Тимеделта у ПостгреСКЛ и вратимо је у одговарајућем формату.

Прво, хајде да увеземо потребне библиотеке и успоставимо везу са нашом ПостгреСКЛ базом података.

import pandas as pd
import psycopg2

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

пандас Тимеделта и ПостгреСКЛ Интервал

пандас Тимеделта је моћно средство за изражавање временских разлика на доследан и читљив начин. Лако је креирати и манипулисати тимеделта објектима у пандама, али када је у питању њихово складиштење у ПостгреСКЛ бази података, морамо их конвертовати у одговарајући формат.

ПостгреСКЛ нуди тип података `интервал` за чување временских интервала. Овај тип података може представљати временски распон у различитим грануларностима, као што су дани, сати, минути и секунде. Да бисмо сачували панду Тимеделта у ПостгреСКЛ бази података, морамо да је конвертујемо у ПостгреСКЛ интервал.

Хајде да направимо узорак пандас ДатаФраме са колоном Тимеделта:

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)

Сада направимо функцију за уметање ових података у нашу ПостгреСКЛ базу података и конвертовање Тимеделта података у интервал компатибилан са ПостгреСКЛ-ом.

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

Користећи ову функцију, можемо да убацимо наше пандас ДатаФраме податке у ПостгреСКЛ базу података:

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

Преузимање Тимеделта из ПостгреСКЛ-а

Када се подаци о пандас Тимеделта чувају у ПостгреСКЛ-у као интервали, лако можемо да их преузмемо и конвертујемо назад у пандас Тимеделта док читамо податке.

Хајде да направимо функцију за преузимање података из наше ПостгреСКЛ табеле:

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

Помоћу ове функције можемо преузети и одштампати податке из наше ПостгреСКЛ базе података:

result = fetch_data(conn)
print(result)

Подаци који се преузимају из ПостгреСКЛ-а сада имају своје Тимеделте правилно представљене као панде Тимеделтас.

У закључку, претварање панди Тимеделта у формат погодан за ПостгреСКЛ складиште и његово преузимање у оригиналном облику је једноставан процес. Коришћењем моћних библиотека панда и псицопг2, можемо лако да рукујемо подацима временских серија и одржавамо њихову исправну репрезентацију, како у нашој анализи података, тако иу нашој бази података.

Релатед постс:

Оставите коментар