2017-07-12 1 views
0

Diese Frage steht in engem Zusammenhang mit meiner früheren Frage: here
Sorry, dass ich wieder fragen muss!Python Leistungsprobleme beim Klassifizieren von Spaltenwerten

Der folgende Code läuft und liefert die richtigen Ergebnisse, aber es ist wieder irgendwie langsam (4 Minuten für 80K Zeilen). Ich habe Probleme, die Serie Klasse von Pandas für konkrete Werte zu verwenden. Kann jemand empfehlen, wie ich diese Spalten stattdessen klassifizieren kann?

konnte nicht relevante Informationen in der Dokumentation finden:
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.html

Lauf Code:

# p_test_SOLL_test_D10 

for x in range (0,len(tableContent[6])): 
    var = tableContent[6].loc[x, ('p_test_LAENGE')] 
    if float(tableContent[6].loc[x, ('p_test_LAENGE')])>=100.0: 
     tableContent[6].loc[x, ('p_test_LAENGE')]='yes' 
    elif (float(tableContent[6].loc[x, ('p_test_LAENGE')]) <30.0 and float(tableContent[6].loc[x, ('p_test_LAENGE')]) >= 10): 
     tableContent[6].loc[x, ('p_test_LAENGE')]='yes2' 
    elif (float(tableContent[6].loc[x, ('p_test_LAENGE')]) <10.0 and float(tableContent[6].loc[x, ('p_test_LAENGE')]) >= 5): 
     tableContent[6].loc[x, ('p_test_LAENGE')]='yes3' 
    else: 
     tableContent[6].loc[x, ('p_test_LAENGE')]='no' 

print (tableContent[6]['p_test_LAENGE']) 

Serie Versuchen:

if tableContent[6]['p_test_LAENGE'].astype(float) >=100.0: 
    tableContent[6]['p_test_LAENGE']='yes' 
elif (tableContent[6]['p_test_LAENGE'].astype(float) <30.0 and tableContent[6]['p_test_LAENGE'].astype(float) >= 10): 
    tableContent[6]['p_test_LAENGE']='yes1' 
elif (tableContent[6]['p_test_LAENGE'].astype(float) <10.0 and tableContent[6]['p_test_LAENGE'].astype(float) >= 5): 
    tableContent[6]['p_test_LAENGE']='yes2' 
else: 
    tableContent[6]['p_test_LAENGE']='no' 


print (tableContent[6]['p_test_LAENGE']) 
+0

Es gibt viel mehr erfahrene Leute mit Pandas (wahrscheinlich in dieser Frage suchen jetzt) . Also werde ich nicht einmal versuchen, Ihnen einen kanonischen Ansatz zu geben. Der Hinweis in Ihrer vorherigen Frage erwähnt jedoch "Vektorisierung" und "nimm die Schleife". Wenn Sie 'for' Loops verwenden, laufen sie grob in Python-Zeit (rechnerisch) und Sie können sich genauso gut nicht mit' numpy' oder 'pandas' beschäftigen und einfach nur mit vanilla python arbeiten. Es erfordert eine Verschiebung des Denkens, und ein paar Tutorials könnten Ihnen hier gut passen, bevor Sie fortfahren. – roganjosh

Antwort

1

Ich habe nicht Ihre df so zu testen, was Sie brauchen um den folgenden Code zu ändern. wird angenommen, dass min von df größer als 10e-7 während max von df weniger als 10e7

bin = [10e-7,5,10,30,100,10e7] 
label = ['no','yes2','yes1','no','yes'] 
df['p_test_LAENGE_class'] = pd.cut(df['p_test_LAENGE'], bins=bin, labels=label) 

Hope this helfen Ihnen

+0

Vielen Dank! Die Cut-Methode war, was ich gesucht habe! – Bene

Verwandte Themen