Python: запретить округление значений в рядах панд до целого
Я пытался установить некоторые значения в серии, но он будет автоматически округляться до целого числа, что я должен сделать, чтобы предотвратить это?
from __future__ import division
import pandas as pd
In [100]: series = pd.Series(range(20))
In [101]: series[10]
Out[101]: 10
In [102]: series[10] = 0.05
In [103]: series[10]
Out[103]: 0
In [104]: series[10] = 2.5
In [105]: series[10]
Out[105]: 2
In [106]: series[10] = float(2.5)
In [107]: series[10]
Out[107]: 2
In [108]: float(2/3)
Out[108]: 0.6666666666666666
In [109]: series[10] = float(2/3)
In [110]: series[10]
Out[110]: 0
1 ответов
series
автоматически создается с помощью тега int64
тип данных (с range(20)
содержит только целые числа). При попытке установить значение этого ряда в float значения усекаются до целого числа, так как Pandas не будет автоматически продвигать тип данных ряда.*
самый простой способ обойти это-создать серию с требуемым типом данных:
series = pd.Series(range(20), dtype=float)
или вы можете бросить целочисленный ряд, как только он был создано:
series = series.astype(float)
затем вы сможете установить значения float для серии.
* это несколько похоже на поведение NumPy с массивами. Однако, в отличие от NumPy, панды будет продвиньте тип данных ряда от целого до плавающего типа, если вы попытаетесь установить nan
значение:
series[10] = np.nan # series is promoted to float64 type
панды также будут продвигать серию до object
тип данных при попытке установить строковое значение:
series[5] = 'some string' # series is promoted to object type