121 Stimmen

Einen einzelnen Spaltenwert in Pandas runden

Gibt es eine Möglichkeit, eine einzelne Spalte in Pandas zu runden, ohne den Rest des Datenrahmens zu beeinflussen?

>>> print(df)
  item  value1  value2
0    a    1.12     1.3
1    a    1.50     2.5
2    a    0.10     0.0
3    b    3.30    -1.0
4    b    4.80    -1.0

Ich habe folgendes versucht:

>>> df.value1.apply(np.round)
0    1
1    2
2    0
3    3
4    5
5    5

Wie mache ich die Daten richtig aussehen lassen:

  item  value1  value2
0    a       1     1.3
1    a       2     2.5
2    a       0     0.0
3    b       3    -1.0
4    b       5    -1.0
5    c       5     5.0

132voto

Frames Catherine White Punkte 25693

Sie sind sehr nah dran. Sie haben die Rundung auf die Serie von Werten angewendet, die durch df.value1 gegeben sind. Der Rückgabetyp ist also eine Serie. Sie müssen diese Serie dem DataFrame zurückweisen (oder einem anderen DataFrame mit dem gleichen Index).

Außerdem gibt es eine pandas.Series.round-Methode, die im Grunde eine Abkürzung für pandas.Series.apply(np.round) ist.

>>> df.value1 = df.value1.round()
>>> print df
  item  value1  value2
0    a       1     1.3
1    a       2     2.5
2    a       0     0.0
3    b       3    -1.0
4    b       5    -1.0

87voto

MarLeo Punkte 2536

Für irgendeinen Grund funktioniert die round() Methode nicht, wenn Sie Fließkommazahlen mit vielen Dezimalstellen haben, aber dies wird funktionieren.

decimals = 2    
df['column'] = df['column'].apply(lambda x: round(x, decimals))

34voto

Siddi Punkte 1163

Verwenden Sie die pandas.DataFrame.round() Methode folgendermaßen:

df = df.round({'value1': 0})

Alle nicht enthaltenen Spalten bleiben unverändert.

21voto

Premal Punkte 211

Es ist nicht notwendig, eine Schleife zu verwenden. Es kann direkt auf eine Spalte eines Dataframes angewendet werden

sleepstudy['Reaction'] = sleepstudy['Reaction'].round(1)

9voto

kawingkelvin Punkte 3541

Wenn Sie maschinelles Lernen betreiben und TensorFlow verwenden, sind viele Gleitkommazahlen von 'float32', nicht von 'float64', und keiner der in diesem Thread erwähnten Methoden wird höchstwahrscheinlich funktionieren. Sie müssen zuerst in float64 konvertieren.

x.astype('float64')

bevor Sie round(...) verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X