[英]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.