熊猫将数字舍入为0

时间:2018-02-12 15:34:02

标签: python pandas

我试图为一个单元格赋值,但是Pandas将它舍入为零。 (我使用的是Python 3.6)

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

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

out: 0

但是,如果我尝试将此值分配给标准Python字典键,则可以正常工作。

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

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

我已经这样做了,但它没有帮助:

  • pd.set_option(' precision',50)
  • pd.set_option(' chop_threshold&#39 ;, 0.00000000005)

请帮助。

2 个答案:

答案 0 :(得分:1)

pandas似乎假设您的数据类型是integer (int)

有几种方法可以解决这个问题,方法是在构造DataFrame时将数据类型设置为float,或者通过更改(或转换)数据类型(也称为dtype)来a float即时。

在构造期间设置数据类型(dtype):

>>> import pandas as pd

在制作这个简单的DataFrame时,我们提供了一个示例值(1),DataFrame的列定义为在创建过程中包含floats

>>> 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

答案 1 :(得分:0)

您列的数据类型最有可能设置为int。在分配值之前,您需要将其转换为float或混合类型object

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