تم حلها: الباندا Timedelta إلى postgres

في عالم تحليل البيانات ، يعد التعامل مع بيانات السلاسل الزمنية جانبًا مهمًا. واحدة من المكتبات الأكثر استخدامًا لهذا الغرض هي ** pandas ** في لغة برمجة Python. من المهام الشائعة عند العمل باستخدام بيانات السلاسل الزمنية تحويل الفروق الزمنية بين الأحداث المختلفة إلى تنسيق قياسي. هذا هو المكان الذي يأتي فيه الباندا Timedelta في متناول يدي. ومع ذلك ، عند العمل مع قواعد بيانات مثل PostgreSQL ، قد يكون تخزين هذه الأدوات الزمنية أمرًا صعبًا بعض الشيء. في هذه المقالة ، سنناقش كيفية تحويل pandas Timedelta إلى تنسيق يمكن تخزينه في PostgreSQL ، واسترداده مع الحفاظ على تمثيله الصحيح.

حل للمشكلة

يتضمن حل هذه المشكلة استخدام مكتبات pandas و 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 الفاصل الزمني

الباندا Timedelta هي أداة قوية للتعبير عن الفروق الزمنية بطريقة متسقة ومقروءة. من السهل إنشاء كائنات timedelta ومعالجتها في الباندا ، ولكن عندما يتعلق الأمر بتخزينها في قاعدة بيانات PostgreSQL ، نحتاج إلى تحويلها إلى التنسيق المناسب.

تقدم PostgreSQL نوع بيانات "الفاصل الزمني" لتخزين الفواصل الزمنية. يمكن أن يمثل نوع البيانات هذا نطاقًا زمنيًا بدرجات دقة مختلفة ، مثل الأيام والساعات والدقائق والثواني. من أجل تخزين الباندا Timedelta في قاعدة بيانات PostgreSQL ، نحتاج إلى تحويلها إلى فترة PostgreSQL.

لنقم بإنشاء نموذج pandas 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()

باستخدام هذه الوظيفة ، يمكننا إدخال بيانات pandas 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

بمجرد تخزين بيانات pandas Timedelta في PostgreSQL على شكل فترات زمنية ، يمكننا بسهولة استرجاعها وتحويلها مرة أخرى إلى الباندا Timedeltas أثناء قراءة البيانات.

لنقم بإنشاء دالة لجلب البيانات من جدول 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 الخاصة بها ممثلة بشكل صحيح على أنها الباندا Timedeltas.

في الختام ، يعد تحويل pandas Timedelta إلى تنسيق مناسب لتخزين PostgreSQL واسترجاعه في شكله الأصلي عملية مباشرة. من خلال الاستفادة من مكتبات الباندا و psycopg2 القوية ، يمكننا بسهولة التعامل مع بيانات السلاسل الزمنية والحفاظ على تمثيلها المناسب ، سواء في تحليل البيانات لدينا أو في تخزين قاعدة البيانات لدينا.

الوظائف ذات الصلة:

اترك تعليق