2017-03-19 1 views
0

ich den folgenden Code geschrieben, in dem ich ein Wörterbuch von pandas Datenrahmen zu erstellen:Mit Wörterbuchschlüssel in Pandas Datenrahmen Spalten

import pandas as pd 
import numpy as np 

classification = pd.read_csv('classification.csv') 

thresholdRange = np.arange(0, 70, 0.5).tolist() 

classificationDict = {} 

for t in thresholdRange: 
    classificationDict[t] = classification 

for k, v in classificationDict.iteritems(): 
    v ['Threshold'] = k 

In diesem Fall mag ich rief eine Spalte erstellen ‚Threshold‘ in allen Pandas Datenrahmen, in denen die Schlüssel des Wörterbuchs die Werte sind. Was ich jedoch mit dem obigen Code bekomme, ist der gleiche Wert in allen Datenrahmen. Was fehlt mir hier? Vielleicht verkompliziere ich die Dinge mit diesem Ansatz, aber ich würde Ihre Hilfe sehr schätzen.

+0

Sind Sie sicher, dass dieser Code läuft? Sie importieren 'numpy' und verwenden dannrange ohne' np.'? Und 'tolist()' braucht wahrscheinlich die Klammern? – Ilja

+0

Danke @Ilja. Ich habe gerade die Frage bearbeitet. Ich tippte das auf mein Smartphone und ich vermisste diese wichtigen Details. – ropolo

+0

Nun, sollten Sie gewartet haben, bis Sie vor Ihrem Computer - oder sind es _so_ dringend;) Das Codebeispiel ein minimales Arbeitsbeispiel sein soll. Wenn Sie versuchen, einen zu erstellen, finden Sie das Problem oft selbst. – Ilja

Antwort

0

Natürlich erhalten Sie den gleichen Wert. Sie tun die gleiche Zuordnung immer und immer wieder in

for k, v in classificationDict.iteritems(): 

weil Ihr v s sind alle identisch, können Sie sie in der ersten for
zugewiesen Haben Sie versucht, sich das Debuggen und drucken classification? Ich nehme an, dass es nur die erste Zeile ist?

+0

Danke für deine Antwort @Ilja. Ich habe eine Antwort gefunden, wie man mit awk ein ähnliches Ergebnis erzielen kann: http://stackoverflow.com/questions/42891531/adding-column-to-csv-file-with-awk-using-number-sequence. Hast du einen Ratschlag, wie du das in Python angehen kannst? – ropolo

+0

warten, Sie möchten 140 Dateien haben? jeweils mit einer Spalte mit identischen Einträgen? Dann habe ich Ihre Frage missverstanden, ich dachte, Sie wollen die Sequenz in einer Spalte haben ... sorry :(Ich werde ein wenig anpassen – Ilja

+0

Ich habe eine neue Antwort hinzugefügt, ich denke, ich werde dies löschen, da es Ihre Frage nicht adressiert ... – Ilja

1

Entschuldigung, ich habe Ihre Frage falsch beantwortet. Jetzt ist das das Problem:

Offensichtlich ist Klassifikation (ein pandas Dataframe, ich nehme an) ein veränderbares Objekt, und das Hinzufügen eines veränderbaren Gegenstandes zu einer Liste oder zu einem Diktat macht merkwürdiges (für Python- Anfänger) Verhalten. Das gleiche Objekt wird hinzugefügt. Wenn Sie einen der Listeneinträge ändern, werden alle geändert. Versuchen Sie dies:

a = [1] 
b = [a, a] 
b[0] = 2 
print(b[1]) 

Dies ist, was passiert mit Ihrem Diktat. Sie müssen dem Diktat verschiedene Objekte hinzufügen. Wahrscheinlich hat der Datenrahmen eine .copy() -Methode, um dies zu tun. Alternativ habe ich diesen Beitrag für Sie gefunden, mit (im Wesentlichen) dem gleichen Problem, da gibt es weitere Lösungen:
https://stackoverflow.com/a/2612815/6053327

+0

ich bestätigen, wenn Sie .copy() am Ende des classificationDict [t] add = Klassifizierung der Code funktioniert. –

Verwandte Themen