我有兩個如下所示的資料集:
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()而且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函式的情況下獲得所需的資料集而不會遇到記憶體錯誤問題?
uj5u.com熱心網友回復:
如果性能不重要,您可以創建一個默認字典,并將前三個值用作字典鍵,然后將數量和銷售額添加到值字典中。這將允許您處理檔案而無需先將它們讀入記憶體。
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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/474504.html
