Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 最大递归错误_Python_Pandas - Fatal编程技术网

Python 最大递归错误

Python 最大递归错误,python,pandas,Python,Pandas,我正试图从ESPN.com上获取一些框分数,并将它们放入熊猫数据框中。我过去也以同样的方式做过类似的事情,没有任何问题。然而,在这种情况下,当我试图保存数据帧时,我得到了这个错误 RuntimeError:调用Python对象时超出了最大递归深度 print data 我在尝试将其保存为hdf5表时遇到类似错误 即使是这个片段也会出现同样的错误。我很困惑它为什么要这么做?这与功能有关吗 url = 'http://espn.go.com/nba/boxscore?gameId=40027877

我正试图从ESPN.com上获取一些框分数,并将它们放入熊猫数据框中。我过去也以同样的方式做过类似的事情,没有任何问题。然而,在这种情况下,当我试图保存数据帧时,我得到了这个错误

RuntimeError:调用Python对象时超出了最大递归深度

print data
我在尝试将其保存为hdf5表时遇到类似错误

即使是这个片段也会出现同样的错误。我很困惑它为什么要这么做?这与功能有关吗

url = 'http://espn.go.com/nba/boxscore?gameId=400278773'   
boxurl = urllib2.urlopen(url).read()
soup = BeautifulSoup(boxurl)

tables = soup.findAll('table')
lineScoreTable = tables[-2]
lineScoreRows = lineScoreTable.findAll('tr') 

def GetAwayQTRScores():
    scoreRow = lineScoreRows[1].findAll('td')
    awayQTRScores = []
    for x in scoreRow:
        scores =  x.string
        awayQTRScores.append(scores)
    return awayQTRScores  # returns list

 awayQTRScores = GetAwayQTRScores()

 awayTeam = awayQTRScores[0]
 awayQ1 = int(awayQTRScores[1])
 awayQ2 = int(awayQTRScores[2])
 awayQ3 = int(awayQTRScores[3])
 awayQ4 = int(awayQTRScores[4])
 awayOT1 = np.nan if len(awayQTRScores) < 7 else int(awayQTRScores[5])
 awayOT2 = np.nan if len(awayQTRScores) < 8 else int(awayQTRScores[6])
 awayOT3 = np.nan if len(awayQTRScores) < 9 else int(awayQTRScores[7])
 awayOT4 = np.nan if len(awayQTRScores) < 10 else int(awayQTRScores[8])



 data = {'AwayTeam' :[awayTeam],
    'AwayQ1' : [awayQ1],
    'AwayQ2' : [awayQ2],
    'AwayQ3' : [awayQ3],
    'AwayQ4' : [awayQ4],
    'AwayOT1' : [awayOT1],
    'AwayOT2' : [awayOT2],
    'AwayOT3' : [awayOT3],
    'AwayOT4' : [awayOT4]}


testScrape = pd.DataFrame(data)
testScrape.save('testScrape')
返回


{'AwayTeam':[u'LAL','AwayOT4':[nan],'AwayQ4':[27],'AwayQ3':[36],'AwayQ2':[24],'AwayQ1':[16],'AwayOT1':[nan],'AwayOT2':[nan],'AwayOT3':[nan]} 但是什么物体包含它自己呢?当你把它们全部打印出来时,它们看起来都很好

这是一个awayTeam这是一个,你可以通过这样做得到:

awayTeam = awayQTRScores[0]
您可能仅仅从
print-awayTeam
或者甚至从
print-repr(awayTeam)
中没有注意到它,因为
navigablesting
unicode
的一个子类,并且没有定义自定义的
\uuuuu str\uuuuuu
\uuuuuuuuu repr\uu
,所以它像字符串一样打印

但是它也没有定义自定义的pickler,所以它使用默认的pickler。一般来说,
bs4
对象的设计不是为了进行pickle处理,它们中的许多对象也不能进行pickle处理。特别是,
NavigableString
是一个间接包含自身的对象。正如文件所说:

如果您想在Beautiful Soup之外使用
NavigableString
,您应该对其调用
unicode()
,将其转换为普通的Python unicode字符串。如果您不这样做,您的字符串将携带对整个Beautiful Soup解析树的引用,即使您已经使用Beautiful Soup

当然,解析树包含对字符串的引用,等等。因此,这种类型永远不能被pickle

解决办法很简单。您想要的是一个普通的
unicode
字符串,而不是
navigablesting
,因此您可以这样做:

awayTeam = unicode(awayQTRScores[0])

通常,它有助于显示完整的回溯,或者至少显示引发异常的行,而不仅仅是异常的文本。您能发布完整的堆栈跟踪吗?另外,请修复缩进以使代码可运行。奇怪的是您可以执行DataFrame(testScrape.to_dict('foo'))。save(),这看起来像是一个奇怪的错误,可能最好将其报告为github问题。等等,我知道了
awayTeam
不是一个
str
,它是一个自包含的对象。让我写一个更详细的答案。谢谢!我正在使用Python3.6.x,并围绕
str(awayQTRScore[0])
完成了这个技巧。