konvertieren pandas series float zu int
Ich bin Diskretisierung von meiner Serie für einen Anfänger. Ich brauche wirklich die Serie für die float -, und ich wirklich Notwendigkeit der Vermeidung von for-Schleifen.
Wie konvertiere ich diese Serie von float nach int?
Hier ist meine Funktion, die derzeit nicht:
def discretize_series(s,count,normalized=True):
def discretize(value,bucket_size):
return value % bucket_size
if normalized:
maximum = 1.0
else:
minimum = np.min(s)
s = s[:] - minimum
maximum = np.max(s)
bucket_size = maximum / float(count)
Hier ist die Linie, die bewirkt, dass die Funktion fehlschlägt:
s = int((s[:] - s[:] % bucket_size)/bucket_size)
Int() induziert eine casting-Fehler: ich bin nicht in der Lage zu werfen die pandas Serie als int-Serie.
return s
Wenn ich entfernen Sie die int(), die Funktion funktioniert, so kann ich nur sehen, ob ich bekommen kann es trotzdem zur Arbeit.
- In der ersten Verzweigung, minimum größer als null ist, so subtrahieren Sie von allen Werten setzt die minimale null. In der zweiten Abteilung, minimal weniger als null, also dem hinzufügen des abs(min) verschiebt die Daten, bis auf null...
- Oh...lol, Recht =)
- Und wenn
pandas
tut etwas fischig, die Sie vielleicht nicht brauchen diese[:]
es. - Was bedeutet "derzeit nicht" bedeuten? Funktioniert es nur nicht bei
normalized==True
? Sie müssen möglicherweise eingestellts=s/np.max(s)
in diesem Fall. Und Sie können noch immer Probleme haben, wennnp.max(s)<0
. Ist das möglich? - Nein, es scheitert an der int () - Funktion in Zeile 11. Es kann nicht die Serie von float zu int.
- So, sind Sie sicher, dass es richtig funktioniert für die
normalized==True
Fall, wenn Sie Ihre Eingabe-Serie hat ein maximum von, sagen wir, 10? Zum Beispiel, für einecount
2, Sie haben einebucket_size
von0.5
. Aber dann den maximalen Wert vons
Sie hätte(10 - 10%0.5)/0.5==20
, viel mehr als 2. Ich würde erwarten, dass Sie haben zu tun die gleiche Verschiebung auf 0, aber Sie haben auch eine Division durch die maximale. - Oh...normalisiert bedeutet, dass die max ist 1.0 und die min ist 0,0.
- Gut, ich verstehe, dass, aber Ihre Funktion überprüft nicht, dass überhaupt. Wenn Sie glauben, dass die input-parameter ohne überprüfung, dann OK, ich dachte, das war eine Funktion um die Daten zu normieren. Das wäre in der Tat nicht viel Sinn, im Nachhinein, da die resultierende diskretisierte signal identisch wären. Sorry, ich verstehe es jetzt:)
- Ich meine, lol, ja, ich könnte einfach löschen, die normalized=true...aber es wäre schon eine doppelte Redundanz in meinem code, da ich bereits codiert eine Normalisierung. Ich denke, Sie haben Recht. Es ist nicht, wie ich über die Geschwindigkeit bei diesem Schritt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den regulären python
int
Funktion funktioniert nur für Skalare. Verwenden Sie entweder ein numpy-Funktion die Daten zu Runden, entwederund wenn Sie wirklich wollen, zu konvertieren von einem integer-Typ, verwenden Sie
cast-array.