2017-08-17 1 views
0

Ich habe versucht, Andrew Kurven arbeiten mit diesem Code zu machen:Andrew Kurven: maximale Rekursionstiefe überschritten, während ein Python-Objekt aufrufen

import pandas as pd 
from pandas.plotting import andrews_curves 

def andrews_curves(df, class_column, normalize = False): 
    plt.style.use("ggplot") 
    plt.figure() 
    andrews_curves(df, class_column) 
    plt.draw() 

andrews_curves(players, "RANK") 

plt.show() 

Wo players ist meine Datenrahmen. Und es gab eine Warnung auf:

More than 20 figures have been opened 

Und dann:

RecursionError: maximum recursion depth exceeded while calling a Python object 

Dies geschieht nur mit Andreas Kurven, da Parallel Koordinaten mit fast dem gleichen Code funktioniert gut:

def parallel_coords(df, class_column): 
    plt.style.use("ggplot") 
    plt.figure() 
    parallel_coordinates(df, class_column = class_column, cols = list(df), alpha = 0.4) 
    plt.draw() 

parallel_coords(players, "RANK") 
plt.show() 

Ich habe versucht, , clf() und cla() Methoden zu verwenden, aber sie haben alle null Wirkung.

Antwort

1

Sie müssen die Funktion andrews_curves in Ihrem Code umbenennen.

Es scheint, dass das, was Sie tunwollen, ist Anruf pandas.plotting.andrews_curves, innerhalb Ihrer eigenen andrews_curves Funktion.

Das Problem ist, sobald Sie andrews_curves definieren, das auf das andere Objekt des gleichen Namens ersetzt, so dass die Wirkung Ihrer Funktion des Aufrufs ist, dass sie sich selbst rekursiv aufruft, bis es Pythons Rekursion Grenze hits:

Why does Python have a maximum recursion depth?

Dies wirkt sich nicht auf parallel_coords aus, da die Funktion, die Sie dort aufrufen, einen anderen Namen hat.

Kurz gesagt, benennen Sie Ihre andrews_curves etwas funktionieren anders:

def plot_andrews_curves(df, class_column, normalize = False): 
    plt.style.use("ggplot") 
    plt.figure() 
    andrews_curves(df, class_column) 
    plt.draw() 

und Sie werden dieses Problem nicht haben.

Verwandte Themen