我对Python和Pandas都很陌生,我试图找出最快的方法来执行左侧数据集(大约1100万行)和右侧数据集(大约160K行和四列)之间庞大的左侧外部连接。这应该是一个多对一的情况,但我希望连接不要踢出一个错误,如果有一个重复的行在右侧。我在Windows7 64位系统上使用了CanopyExpress,内存为8GB,我已经很难适应了。
这是我迄今为止整理的代码模型:
import pandas as pd
leftcols = ['a','b','c','d','e','key']
leftdata = pd.read_csv("LEFT.csv", names=leftcols)
rightcols = ['x','y','z','key']
rightdata = pd.read_csv("RIGHT.csv", names=rightcols)
mergedata = pd.merge(leftdata, rightdata, on='key', how='left')
mergedata.to_csv("FINAL.csv")
这可以处理小文件,但在我的系统上生成一个内存错误,文件大小比我实际需要合并的文件大小小两个数量级。
我一直在浏览相关的问题(one,two,three),但没有一个答案能真正解决这个基本问题——或者如果答案是这样的话,它的解释不足以让我认识到潜在的解决方案。接受的答案也无济于事。我已经在一个64位系统上使用了最新稳定版本的Canopy(1.5.5 64位,使用Python 2.7.10)。
什么是最快和/或最蟒蛇的方法来避免这个记忆错误的问题?
最佳答案
为什么不直接将您的右文件读入pandas(甚至读入一个简单的字典),然后使用csv
模块遍历您的左文件来读取、扩展和写入每一行?处理时间(相对于开发时间)是一个重要的限制吗?