Alexey Yunoshev
Alexey Yunoshev

Reputation: 373

Pandas rounds number to 0

I'm trying to assign a value to a cell, yet Pandas rounds it to zero. (I'm using Python 3.6)

in: df['column1']['row1'] = 1 / 331616

in: print(df['column1']['row1'])

out: 0

But if I try to assign this value to a standard Python dictionary key, it works fine.

in: {'column1': {'row1': 1/331616}}

out: {'column1': {'row1': 3.0155360416867704e-06}}

I've already done this, but it didn't help:

Please, help.

Upvotes: 1

Views: 1034

Answers (2)

E. Ducateme
E. Ducateme

Reputation: 4238

pandas appears to be presuming that your datatype is an integer (int).

There are several ways to address this, either by setting the datatype to a float when the DataFrame is constructed OR by changing (or casting) the datatype (also referred to as a dtype) to a float on the fly.

setting the datatype (dtype) during construction:

>>> import pandas as pd

In making this simple DataFrame, we provide a single example value (1) and the columns for the DataFrame are defined as containing floats during creation

>>> df = pd.DataFrame([[1]], columns=['column1'], index=['row1'], dtype=float)
>>> df['column1']['row1'] = 1 / 331616
>>> df
       column1
row1  0.000003

converting the datatype on the fly:

>>> df = pd.DataFrame([[1]], columns=['column1'], index=['row1'], dtype=int)
>>> df['column1'] = df['column1'].astype(float)
>>> df['column1']['row1'] = 1 / 331616
df
       column1
row1  0.000003

Upvotes: 1

r.ook
r.ook

Reputation: 13858

Your column's datatype most likely is set to int. You'll need to either convert it to float or mixed types object before assigning the value:

df = pd.DataFrame([1,2,3,4,5,6])

df.dtypes
# 0    int64
# dtype: object

df[0][4] = 7/125

df
#    0
# 0  1
# 1  2
# 2  3
# 3  4
# 4  0
# 5  6

df[0] = df[0].astype('O')

df[0][4] = 7 / 22
df

#           0
# 0         1
# 1         2
# 2         3
# 3         4
# 4  0.318182
# 5         6

df.dtypes

# 0    object
# dtype: object

Upvotes: 0

Related Questions