Λύθηκε: pandas Timedelta to postgres

Στον κόσμο της ανάλυσης δεδομένων, ο χειρισμός των δεδομένων χρονοσειρών είναι μια κρίσιμη πτυχή. Μία από τις πιο συχνά χρησιμοποιούμενες βιβλιοθήκες για το σκοπό αυτό είναι τα **pandas** στη γλώσσα προγραμματισμού Python. Μια κοινή εργασία όταν εργάζεστε με δεδομένα χρονοσειρών είναι να μετατρέπετε τις χρονικές διαφορές μεταξύ διαφορετικών συμβάντων σε τυπική μορφή. Εδώ είναι χρήσιμο το pandas Timedelta. Ωστόσο, όταν εργάζεστε με βάσεις δεδομένων όπως η PostgreSQL, η αποθήκευση αυτών των timedelta μπορεί να είναι λίγο δύσκολη. Σε αυτό το άρθρο, θα συζητήσουμε πώς να μετατρέψετε τα pandas Timedelta σε μορφή που μπορεί να αποθηκευτεί στην PostgreSQL και να την ανακτήσετε διατηρώντας τη σωστή αναπαράστασή της.

Λύση στο πρόβλημα

Η λύση σε αυτό το πρόβλημα περιλαμβάνει τη χρήση βιβλιοθηκών panda και psycopg2, οι οποίες χρησιμοποιούνται ευρέως για χειρισμό δεδομένων και διαχείριση βάσης δεδομένων PostgreSQL, αντίστοιχα. Η βιβλιοθήκη psycopg2 έχει υποστήριξη για το χειρισμό timedelta, χρησιμοποιώντας τον τύπο δεδομένων «interval» στο 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")

pandas Timedelta και PostgreSQL Interval

Το pandas Timedelta είναι ένα ισχυρό εργαλείο για την έκφραση των διαφορών ώρας με συνεπή και ευανάγνωστο τρόπο. Είναι εύκολο να δημιουργήσουμε και να χειριστούμε αντικείμενα timedelta σε panda, αλλά όταν πρόκειται να τα αποθηκεύσουμε σε μια βάση δεδομένων PostgreSQL, πρέπει να τα μετατρέψουμε στην κατάλληλη μορφή.

Η PostgreSQL προσφέρει τον τύπο δεδομένων «interval» για την αποθήκευση χρονικών διαστημάτων. Αυτός ο τύπος δεδομένων μπορεί να αντιπροσωπεύει ένα χρονικό διάστημα σε διάφορες λεπτομέρειες, όπως ημέρες, ώρες, λεπτά και δευτερόλεπτα. Για να αποθηκεύσουμε ένα pandas Timedelta σε μια βάση δεδομένων PostgreSQL, πρέπει να το μετατρέψουμε σε διάστημα PostgreSQL.

Ας δημιουργήσουμε ένα δείγμα panda 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 των pandas στη βάση δεδομένων 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

Μόλις τα δεδομένα του panda Timedelta αποθηκευτούν στην PostgreSQL ως διαστήματα, μπορούμε εύκολα να τα ανακτήσουμε και να τα μετατρέψουμε ξανά σε pandas 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.

Συμπερασματικά, η μετατροπή του pandas Timedelta σε μορφή κατάλληλη για αποθήκευση PostgreSQL και η ανάκτησή του στην αρχική του μορφή είναι μια απλή διαδικασία. Αξιοποιώντας τις πανίσχυρες βιβλιοθήκες panda και psycopg2, μπορούμε εύκολα να χειριστούμε δεδομένα χρονοσειρών και να διατηρήσουμε τη σωστή αναπαράστασή τους, τόσο στην ανάλυση των δεδομένων μας όσο και στην αποθήκευση της βάσης δεδομένων μας.

Σχετικές αναρτήσεις:

Αφήστε ένα σχόλιο