Reputation: 373
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
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.
>>> 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
>>> 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
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