נפתרה: פנדה Timedelta לפוסטגרס

בעולם ניתוח הנתונים, טיפול בנתוני סדרות זמן הוא היבט מכריע. אחת הספריות הנפוצות ביותר למטרה זו היא **pandas** בשפת התכנות Python. משימה נפוצה בעבודה עם נתוני סדרות זמן היא להמיר את הפרשי הזמן בין אירועים שונים לפורמט סטנדרטי. זה המקום שבו הפנדות Timedelta מועילות. עם זאת, כאשר עובדים עם מסדי נתונים כמו PostgreSQL, אחסון זמן דלתות אלה יכול להיות קצת מסובך. במאמר זה, נדון כיצד להמיר פנדה Timedelta לפורמט שניתן לאחסן ב-PostgreSQL, ולאחזר אותו תוך שמירה על הייצוג הנכון שלו.

פתרון לבעיה

הפתרון לבעיה זו כרוך בשימוש בספריות פנדות ו-psycopg2, שנמצאות בשימוש נרחב עבור מניפולציה של נתונים וניהול מסדי נתונים PostgreSQL, בהתאמה. לספריית psycopg2 יש תמיכה בטיפול ב-timedeltas, תוך שימוש בסוג הנתונים 'מרווח' ב-PostgreSQL. אנו נמנף תכונה זו כדי לאחסן את הפנדות Timedelta שלנו ב-PostgreSQL ולאחזר אותה בחזרה בפורמט המתאים לה.

ראשית, בואו נייבא את הספריות הדרושות וניצור חיבור למסד הנתונים 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")

פנדות Timedelta ו-PostgreSQL Interval

pandas Timedelta הוא כלי רב עוצמה לביטוי הבדלי זמן בצורה עקבית וקריאה. קל ליצור ולתפעל אובייקטי timedelta בפנדות, אבל כשמדובר באחסוןם במסד נתונים PostgreSQL, עלינו להמיר אותם לפורמט המתאים.

PostgreSQL מציע את סוג הנתונים 'מרווחים' לאחסון מרווחי זמן. סוג נתונים זה יכול לייצג טווח זמן בפרטים שונים, כגון ימים, שעות, דקות ושניות. על מנת לאחסן פנדה Timedelta במסד נתונים PostgreSQL, עלינו להמיר אותו למרווח PostgreSQL.

בואו ניצור דוגמה של פנדה DataFrame עם עמודת 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)

כעת בואו ניצור פונקציה להכנסת נתונים אלה למסד הנתונים PostgreSQL שלנו ולהמיר את נתוני Timedelta למרווח תואם PostgreSQL.

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

באמצעות פונקציה זו, אנו יכולים להכניס את נתוני DataFrame של הפנדות שלנו למסד הנתונים של PostgreSQL:

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

אחזור Timedeltas מ-PostgreSQL

ברגע שנתוני Timedelta של הפנדות מאוחסנים ב-PostgreSQL כמרווחים, נוכל לאחזר אותם בקלות ולהמיר אותם בחזרה לפנדות Timedelta בזמן קריאת הנתונים.

בואו ניצור פונקציה כדי להביא את הנתונים מטבלת 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

עם פונקציה זו, אנו יכולים להביא ולהדפיס את הנתונים ממסד הנתונים PostgreSQL שלנו:

result = fetch_data(conn)
print(result)

לנתונים שנלקחו מ-PostgreSQL יש כעת את ה-Timedeltas שלו מיוצגים כהלכה כ-Pandas Timedeltas.

לסיכום, המרת פנדות Timedelta לפורמט המתאים לאחסון PostgreSQL ושליפתו בצורתו המקורית היא תהליך פשוט. על ידי מינוף ספריות הפנדות החזקות ו-psycopg2, אנו יכולים לטפל בקלות בנתוני סדרות זמן ולשמור על הייצוג הנכון שלהם, הן בניתוח הנתונים שלנו והן באחסון מסד הנתונים שלנו.

הודעות קשורות:

השאירו תגובה