Nic*_*ick 9 python memory-management pandas
我正在从两个需要加入的不同数据库中下载两个数据集.当我将它们存储为CSV时,它们中的每一个分别约为500MB.分别适合内存,但当我加载两个时,我有时会得到一个内存错误.当我尝试将它们与熊猫合并时,我肯定会遇到麻烦.
对它们进行外连接的最佳方法是什么,这样我就不会出现内存错误?我手头没有任何数据库服务器,但如果有帮助,我可以在我的计算机上安装任何类型的开源软件.理想情况下,我仍然只想在熊猫中解决它,但不确定这是否可行.
澄清一下:合并是指外连接.每个表都有两行:产品和版本.我想检查左表中的产品和版本,仅右表和两个表.我做了一个
pd.merge(df1,df2,left_on=['product','version'],right_on=['product','version'], how='outer')
Run Code Online (Sandbox Code Playgroud)
roo*_*oot 16
这似乎是一项dask专为此设计的任务.从本质上讲,dask可以在pandas核心外进行操作,因此您可以使用不适合内存的数据集.该dask.dataframeAPI是的一个子集pandasAPI,所以不应该有太大的学习曲线.有关其他一些DataFrame特定详细信息,请参阅Dask DataFrame Overview页面.
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)
Run Code Online (Sandbox Code Playgroud)
假设'product'并且'version'是唯一的列,替换mergewith 可能更有效:
df = dd.concat([df1, df2]).drop_duplicates()
Run Code Online (Sandbox Code Playgroud)
我不完全确定这是否会更好,但显然未在索引上进行的合并是"慢速" dask,因此值得一试.
| 归档时间: |
|
| 查看次数: |
10540 次 |
| 最近记录: |