我正在从需要连接的两个不同数据库下载两个数据集。当我将它们存储为 CSV 时,每个文件大约有 500MB 左右。分别适合内存,但当我加载两者时,有时会出现内存错误。当我尝试将它们与 pandas 合并时,我肯定会遇到麻烦。
对它们进行外部连接以免出现内存错误的最佳方法是什么?我手头没有任何数据库服务器,但如果有帮助的话,我可以在我的计算机上安装任何类型的开源软件。理想情况下,我仍然想仅在 pandas 中解决它,但不确定这是否可能。
澄清一下:合并是指外部联接。每个表有两行:产品和版本。我想检查哪些产品和版本仅在左表、右表和两个表中。我用一个
pd.merge(df1,df2,left_on=['product','version'],right_on=['product','version'], how='outer')
这似乎是一个任务dask被设计用于。本质上,dask
can do pandas
核心外操作,因此您可以使用不适合内存的数据集。这dask.dataframe
API 是一个子集pandas
API,所以应该没有太多的学习曲线。请参阅Dask DataFrame 概述页面以获取一些其他 DataFrame 特定详细信息。
import dask.dataframe as dd
# Read in the csv files.
df1 = dd.read_csv('file1.csv')
df2 = dd.read_csv('file2.csv')
# Merge the csv files.
df = dd.merge(df1, df2, how='outer', on=['product','version'])
# Write the output.
df.to_csv('file3.csv', index=False)
假如说'product'
and 'version'
是唯一的列,替换可能会更有效merge
with:
df = dd.concat([df1, df2]).drop_duplicates()
我不完全确定这是否会更好,但显然未在索引上完成的合并在dask
,所以值得一试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)