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 eingestellt s=s/np.max(s) in diesem Fall. Und Sie können noch immer Probleme haben, wenn np.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 eine count 2, Sie haben eine bucket_size von 0.5. Aber dann den maximalen Wert von s 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.

InformationsquelleAutor donlan | 2015-12-07
Schreibe einen Kommentar