我刚开始使用Pandas,尝试合并几个数据子集。这里提供一个具体案例,但问题是普遍的:为什么会发生这种情况,如何解决?
我加载的数据大约有85兆字节左右,但我经常看到我的Python会话占用接近10吉字节的内存,然后出现内存错误。
我不知道为什么会这样,但这让我感到很痛苦,因为我甚至无法按照想要的方式查看数据。
下面是我所做的:
导入主要数据
import requests, zipfile, StringIO
import numpy as np
import pandas as pd
STAR2013url="http://www3.cde.ca.gov/starresearchfiles/2013/p3/ca2013_all_csv_v3.zip"
STAR2013fileName = 'ca2013_all_csv_v3.txt'
r = requests.get(STAR2013url)
z = zipfile.ZipFile(StringIO.StringIO(r.content))
STAR2013=pd.read_csv(z.open(STAR2013fileName))
引入一些交叉引用表
STARentityList2013url = "http://www3.cde.ca.gov/starresearchfiles/2013/p3/ca2013entities_csv.zip"
STARentityList2013fileName = "ca2013entities_csv.txt"
r = requests.get(STARentityList2013url)
z = zipfile.ZipFile(StringIO.StringIO(r.content))
STARentityList2013=pd.read_csv(z.open(STARentityList2013fileName))
STARlookUpTestID2013url = "http://www3.cde.ca.gov/starresearchfiles/2013/p3/tests.zip"
STARlookUpTestID2013fileName = "Tests.txt"
r = requests.get(STARlookUpTestID2013url)
z = zipfile.ZipFile(StringIO.StringIO(r.content))
STARlookUpTestID2013=pd.read_csv(z.open(STARlookUpTestID2013fileName))
STARlookUpSubgroupID2013url = "http://www3.cde.ca.gov/starresearchfiles/2013/p3/subgroups.zip"
STARlookUpSubgroupID2013fileName = "Subgroups.txt"
r = requests.get(STARlookUpSubgroupID2013url)
z = zipfile.ZipFile(StringIO.StringIO(r.content))
STARlookUpSubgroupID2013=pd.read_csv(z.open(STARlookUpSubgroupID2013fileName))
将列ID重命名以便合并
STARlookUpSubgroupID2013 = STARlookUpSubgroupID2013.rename(columns={'001':'Subgroup ID'})
STARlookUpSubgroupID2013
成功合并
merged = pd.merge(STAR2013,STARlookUpSubgroupID2013, on='Subgroup ID')
尝试进行第二次合并。这将导致内存溢出问题。
merged=pd.merge(merged, STARentityList2013, on='School Code')
我在iPython笔记本上完成了所有这些操作,但并不认为这会改变任何事情。