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