Solved: pandas Timedelta hanggang postgres

Sa mundo ng pagsusuri ng data, ang paghawak ng data ng serye ng oras ay isang mahalagang aspeto. Isa sa mga pinakakaraniwang ginagamit na aklatan para sa layuning ito ay **pandas** sa Python programming language. Ang isang karaniwang gawain kapag nagtatrabaho sa data ng time series ay i-convert ang mga pagkakaiba ng oras sa pagitan ng iba't ibang mga kaganapan sa isang karaniwang format. Ito ay kung saan ang mga pandas Timedelta ay madaling gamitin. Gayunpaman, kapag nagtatrabaho sa mga database tulad ng PostgreSQL, ang pag-iimbak ng mga timedelta na ito ay maaaring medyo nakakalito. Sa artikulong ito, tatalakayin natin kung paano i-convert ang mga pandas Timedelta sa isang format na maaaring maimbak sa PostgreSQL, at kunin ito habang pinapanatili ang tamang representasyon nito.

Solusyon sa problema

Ang solusyon sa problemang ito ay nagsasangkot ng paggamit ng mga pandas at psycopg2 na aklatan, na malawakang ginagamit para sa pagmamanipula ng data at pamamahala ng database ng PostgreSQL, ayon sa pagkakabanggit. Ang psycopg2 library ay may suporta para sa paghawak ng timedeltas, gamit ang `interval` na uri ng data sa PostgreSQL. Gagamitin namin ang feature na ito para iimbak ang aming mga pandas na Timedelta sa PostgreSQL at bawiin ito sa tamang format nito.

Una, i-import natin ang mga kinakailangang aklatan at magtatag ng koneksyon sa aming database ng 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 at PostgreSQL Interval

Ang pandas Timedelta ay isang makapangyarihang tool para sa pagpapahayag ng mga pagkakaiba sa oras sa pare-pareho at nababasang paraan. Madaling gumawa at magmanipula ng mga timedelta na bagay sa mga pandas, ngunit pagdating sa pag-iimbak ng mga ito sa isang database ng PostgreSQL, kailangan nating i-convert ang mga ito sa naaangkop na format.

Ang PostgreSQL ay nag-aalok ng `interval` na uri ng data upang mag-imbak ng mga agwat ng oras. Ang uri ng data na ito ay maaaring kumatawan ng tagal ng panahon sa iba't ibang granularity, gaya ng mga araw, oras, minuto, at segundo. Upang mag-imbak ng pandas Timedelta sa isang PostgreSQL database, kailangan namin itong i-convert sa isang PostgreSQL interval.

Gumawa tayo ng sample na pandas DataFrame na may column na 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)

Ngayon, gumawa tayo ng function para ipasok ang data na ito sa aming PostgreSQL database at i-convert ang Timedelta data sa isang PostgreSQL-compatible interval.

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

Gamit ang function na ito, maaari naming ipasok ang aming data ng pandas DataFrame sa database ng PostgreSQL:

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

Kinukuha ang Timedeltas mula sa PostgreSQL

Kapag ang data ng pandas Timedelta ay nakaimbak sa PostgreSQL bilang mga agwat, madali nating makukuha ang mga ito at maibabalik ang mga ito sa mga pandas na Timedeltas habang binabasa ang data.

Gumawa tayo ng isang function upang kunin ang data mula sa aming talahanayan ng 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

Gamit ang function na ito, maaari naming kunin at i-print ang data mula sa aming database ng PostgreSQL:

result = fetch_data(conn)
print(result)

Ang data na kinuha mula sa PostgreSQL ay mayroon na ngayong Timedeltas na wastong kinakatawan bilang pandas Timedeltas.

Sa konklusyon, ang pag-convert ng mga pandas Timedelta sa isang format na angkop para sa imbakan ng PostgreSQL at ang pagkuha nito sa orihinal nitong anyo ay isang tapat na proseso. Sa pamamagitan ng paggamit ng makapangyarihang mga pandas at psycopg2 na library, madali naming mapangasiwaan ang data ng time series at mapanatili ang wastong representasyon nito, kapwa sa aming pagsusuri ng data at sa aming imbakan ng database.

Kaugnay na mga post:

Mag-iwan ng komento