2
votes

Tronquer les décimales des valeurs dans un pandas DF

Je peux tronquer des flottants individuels en utilisant la fonction tronquer dans math . Mais en essayant de transmettre la même fonction à une colonne pandas df , j'obtiens une erreur.

df['X'] = math.trunc(1000 * df['X']) / 1000;

TypeError: type Series doesn't define __trunc__ method

Mais lorsque vous utilisez un pandas df:

d = ({
    'X' : [1.1234,1.1235],           
    })

df = pd.DataFrame(data=d)

df['X'] = math.trunc(1000 * df['X']) / 1000;

Erreur:

import math
import pandas as pd

X = 1.1236

X = math.trunc(1000 * X) / 1000;

#Output
1.123


2 commentaires

Pourquoi utiliseriez-vous truncate et non df.round?


Comparaison avec d'autres chiffres avec n décimales. 1,123 milliard, c'est une grande différence par rapport à 1,124 milliard


3 Réponses :


4
votes

Vous pouvez utiliser applymap

trunc = lambda x: math.trunc(1000 * x) / 1000;

df.applymap(trunc)


1 commentaires

Bonne réponse @Anthony Kong



2
votes

Essayez de remplacer df ['X'] = math.trunc (1000 * df ['X']) / 1000; par df ['X'] = [math.trunc (1000 * val) / 1000 pour val dans df ['X']] . J'espère que ça aide


0 commentaires

3
votes

Je pense que le moyen le plus simple d'y parvenir serait d'utiliser .astype (int) Dans votre exemple, ce serait:

df[x] = ((df[x]*1000).astype(int).astype(float))/1000


0 commentaires