簡體   English   中英

如何將兩個非常大的數據框與相同的列連接在一起?

[英]How to join two very large dataframes together with same columns?

我有兩個如下所示的數據集:

df1

日期 城市 狀態 數量
2019-01 芝加哥 伊利諾伊州 35
2019-01 奧蘭多 佛羅里達州 322
... …… ... ...
2021-07 芝加哥 伊利諾伊州 334
2021-07 奧蘭多 佛羅里達州 4332

df2

日期 城市 狀態 銷售量
2019-01 芝加哥 伊利諾伊州 30
2019-01 奧蘭多 佛羅里達州 319
... ... ... ...
2021-07 芝加哥 伊利諾伊州 331
2021-07 奧蘭多 佛羅里達州 4000

它們是非常大的數據集,以至於pd.merge pd.merge()dd.merge()不起作用,並且我的內核給了我內存錯誤。 但是,我發現將這兩者連接起來不會給我帶來內存錯誤。 我想要的數據集out2如下所示:

日期 城市 狀態 數量 銷售量
2019-01 芝加哥 伊利諾伊州 35 30
2019-01 奧蘭多 佛羅里達州 322 319
... ... ... ... ...
2021-07 芝加哥 伊利諾伊州 334 331
2021-07 奧蘭多 佛羅里達州 4332 4000

我使用了以下代碼:

out2=dd.concat([df1,df2],join='outer')

但我的新數據集如下所示:

日期 城市 狀態 數量 銷售量
2019-01 芝加哥 伊利諾伊州 35
2019-01 奧蘭多 佛羅里達州 322
2019-01 芝加哥 伊利諾伊州 30
2019-01 奧蘭多 佛羅里達州 319
... ... ... ... ...
2021-07 芝加哥 伊利諾伊州 334
2021-07 奧蘭多 佛羅里達州 4332
2021-07 芝加哥 伊利諾伊州 331
2021-07 奧蘭多 佛羅里達州 4000

如何在不使用pd.merge函數的情況下獲得所需的數據集而不會遇到內存錯誤問題?

如果性能不重要,您可以創建 dict 的 defaultdict 並將前三個值用作 dict 鍵,然后將數量和銷售額添加到值 dict。 這將允許您處理文件而無需先將它們讀入內存。

from collections import defaultdict
from pathlib import Path

paths = [(Path.home() / 'file1.csv', 'Quantity'), (Path.home() / 'file2.csv', 'Sales')]
results = defaultdict(dict)

for path, value_column in paths:
    with path.open('r') as f:
        for line in f:
            parts = [s.strip() for s in line.split(',')]
            key = tuple(parts[0:-1])
            results[key][value_column] = parts[-1]

combined = pd.concat([pd.DataFrame(data=list(results.keys()), columns=['Date', 'City', 'State']), 
                      pd.DataFrame(list(results.values()))], axis=1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM