Đã giải quyết: pandas Timedelta thành postgres

Trong thế giới phân tích dữ liệu, xử lý dữ liệu chuỗi thời gian là một khía cạnh quan trọng. Một trong những thư viện được sử dụng phổ biến nhất cho mục đích này là **pandas** trong ngôn ngữ lập trình Python. Một nhiệm vụ phổ biến khi làm việc với dữ liệu chuỗi thời gian là chuyển đổi chênh lệch thời gian giữa các sự kiện khác nhau sang định dạng chuẩn. Đây là nơi gấu trúc Timedelta có ích. Tuy nhiên, khi làm việc với các cơ sở dữ liệu như PostgreSQL, việc lưu trữ các timedelta này có thể hơi phức tạp. Trong bài viết này, chúng tôi sẽ thảo luận về cách chuyển đổi gấu trúc Timedelta sang định dạng có thể được lưu trữ trong PostgreSQL và truy xuất nó trong khi vẫn duy trì biểu diễn chính xác của nó.

Giải pháp cho vấn đề

Giải pháp cho vấn đề này liên quan đến việc sử dụng thư viện pandas và psycopg2, được sử dụng rộng rãi để thao tác dữ liệu và quản lý cơ sở dữ liệu PostgreSQL, tương ứng. Thư viện psycopg2 có hỗ trợ xử lý timedeltas, sử dụng kiểu dữ liệu `interval` trong PostgreSQL. Chúng tôi sẽ tận dụng tính năng này để lưu trữ gấu trúc Timedelta của chúng tôi vào PostgreSQL và truy xuất lại ở định dạng phù hợp.

Trước tiên, hãy nhập các thư viện cần thiết và thiết lập kết nối với cơ sở dữ liệu PostgreSQL của chúng tôi.

import pandas as pd
import psycopg2

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

khoảng thời gian gấu trúc Timedelta và PostgreSQL

pandas Timedelta là một công cụ mạnh mẽ để thể hiện sự khác biệt về thời gian theo cách nhất quán và dễ đọc. Thật dễ dàng để tạo và thao tác các đối tượng timedelta trong gấu trúc, nhưng khi lưu trữ chúng trong cơ sở dữ liệu PostgreSQL, chúng ta cần chuyển đổi chúng sang định dạng thích hợp.

PostgreSQL cung cấp kiểu dữ liệu `khoảng thời gian` để lưu trữ các khoảng thời gian. Loại dữ liệu này có thể biểu thị một khoảng thời gian ở nhiều mức độ chi tiết khác nhau, chẳng hạn như ngày, giờ, phút và giây. Để lưu trữ một pandas Timedelta trong cơ sở dữ liệu PostgreSQL, chúng ta cần chuyển đổi nó thành một khoảng thời gian PostgreSQL.

Hãy tạo một Khung dữ liệu gấu trúc mẫu với cột 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)

Bây giờ, hãy tạo một hàm để chèn dữ liệu này vào cơ sở dữ liệu PostgreSQL của chúng ta và chuyển đổi dữ liệu Timedelta thành khoảng thời gian tương thích với 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()

Sử dụng chức năng này, chúng tôi có thể chèn dữ liệu DataFrame của gấu trúc vào cơ sở dữ liệu PostgreSQL:

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

Truy xuất Timedeltas từ PostgreSQL

Sau khi dữ liệu Pandas Timedelta được lưu trữ trong PostgreSQL dưới dạng các khoảng thời gian, chúng ta có thể dễ dàng truy xuất chúng và chuyển đổi chúng trở lại thành Pandas Timedelta trong khi đọc dữ liệu.

Hãy tạo một hàm để lấy dữ liệu từ bảng PostgreSQL của chúng ta:

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

Với chức năng này, chúng tôi có thể tìm nạp và in dữ liệu từ cơ sở dữ liệu PostgreSQL của mình:

result = fetch_data(conn)
print(result)

Dữ liệu được tìm nạp từ PostgreSQL hiện có Timedeltas của nó được biểu diễn chính xác dưới dạng gấu trúc Timedeltas.

Tóm lại, việc chuyển đổi gấu trúc Timedelta sang định dạng phù hợp với bộ lưu trữ PostgreSQL và truy xuất nó ở dạng ban đầu là một quá trình đơn giản. Bằng cách tận dụng các thư viện pandas và psycopg2 mạnh mẽ, chúng tôi có thể dễ dàng xử lý dữ liệu chuỗi thời gian và duy trì biểu diễn phù hợp của nó, cả trong phân tích dữ liệu và lưu trữ cơ sở dữ liệu của chúng tôi.

bài viết liên quan:

Để lại một bình luận