如何使用 SQL 最佳化具有日期約束的 DataFrame 合併?

Susan Sarandon
發布: 2024-10-31 11:13:02
原創
1001 人瀏覽過

How Can I Optimize DataFrame Merging with Date Constraints Using SQL?

使用日期約束合併資料幀

簡介:

基於連接條件和日期約束合併資料幀可以是資料幀分析中的常見任務。雖然 pandas 提供了各種合併選項,但透過在合併過程中進行過濾來優化效能可能有利於避免處理大型中間資料幀。本文討論了使用 SQL 來實現這種效率的替代方法。

與過濾合併:

提供的程式碼片段示範了使用 pd 合併兩個資料幀 A 和 B。 merge() 函數,然後根據日期條件篩選結果。然而,由於在過濾之前創建了中間資料幀,因此這種方法在處理大型資料幀時可能不是最佳的。

SQL 作為替代方案:

SQL 提供了一種更有效的方法在查詢本身中透過篩選來執行此合併。透過連接到記憶體資料庫,我們可以編寫一個查詢,一步執行連接和日期過濾。

代碼示例:

以下代碼演示SQL 方法:

<code class="python">import pandas as pd
import sqlite3

# Connect to in-memory database
conn = sqlite3.connect(':memory:')

# Write dataframes to tables
terms.to_sql('terms', conn, index=False)
presidents.to_sql('presidents', conn, index=False)
war_declarations.to_sql('wars', conn, index=False)

# SQL query
qry = '''
    select  
        start_date PresTermStart,
        end_date PresTermEnd,
        wars.date WarStart,
        presidents.name Pres
    from
        terms join wars on
        date between start_date and end_date join presidents on
        terms.president_id = presidents.president_id
    '''

# Read SQL query results into dataframe
df = pd.read_sql_query(qry, conn)</code>
登入後複製

結果:

產生的資料框df 包含A 中的日期與B 中的日期條件相符的行。在此特定示例中,它返回兩次宣戰的總統和任期。

優點:

此方法有以下優點:

  • 效率: 在單一查詢中執行連線和過濾,無需中間資料幀。
  • 靈活性: 允許在SQL 查詢中使用更複雜的過濾條件.
  • 無中間資料幀:避免在過濾之前儲存可能較大的中間資料幀。

以上是如何使用 SQL 最佳化具有日期約束的 DataFrame 合併?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!