Python 熊猫将数字四舍五入为0

Python 熊猫将数字四舍五入为0,python,pandas,Python,Pandas,我试图给一个单元格赋值,但熊猫将其舍入为零。(我正在使用Python 3.6) 但是,如果我尝试将此值分配给标准Python字典键,则效果很好 in: {'column1': {'row1': 1/331616}} out: {'column1': {'row1': 3.0155360416867704e-06}} 我已经这样做了,但没有帮助: pd.设置选项(“精度”,50) pd.set_选项(“切碎阈值”, .0000000000(5) 请提供帮助。您列的数据类型很可能设置为int

我试图给一个单元格赋值,但熊猫将其舍入为零。(我正在使用Python 3.6)

但是,如果我尝试将此值分配给标准Python字典键,则效果很好

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

out: {'column1': {'row1': 3.0155360416867704e-06}}
我已经这样做了,但没有帮助:

  • pd.设置选项(“精度”,50)
  • pd.set_选项(“切碎阈值”, .0000000000(5)

请提供帮助。

您列的数据类型很可能设置为
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

熊猫似乎认为您的数据类型是一个
整数(int)

有几种方法可以解决这个问题,可以在构建数据帧时将数据类型设置为
float
,也可以动态地将数据类型(也称为
dtype
)更改为
float

在构造期间设置数据类型(dtype): 在制作这个简单的数据框架时,我们提供了一个示例值(
1
),数据框架的列在创建过程中定义为包含
浮动

>>> df = pd.DataFrame([[1]], columns=['column1'], index=['row1'], dtype=float)
>>> df['column1']['row1'] = 1 / 331616
>>> df
       column1
row1  0.000003
动态转换数据类型:
什么版本的python?如果是python2,则需要将其中一个操作数强制转换为
float
df['column1']['row1']=1.0/331616
我正在使用python3。6@AlexeyYunoshev您是否尝试按照pault的建议将
1
更改为
1.0
?每列的类型是什么?在解释器中键入
df.dtypes
,看看你得到了什么。我打赌它是
int
或它的一些变体。@AlexeyYunoshev不客气。之所以舍入为0,是因为列的本机数据类型为
int64
,所以除法会导致截断。在进行转换之前,需要先转换为浮点。在Python3中,如果列类型为
int
,则执行普通除法会自动提供浮点结果,但在Pandas中则不会。这就是为什么在字典中复制结果与在数据框中复制结果不同的原因。谢谢你的回答。上面评论中的人已经帮我弄明白了。希望你的回答能帮助别人。谢谢,谢谢,是的,事后我意识到了,但既然都打印出来了,我就把它留在这里。祝您的其余代码没有错误,干净。祝你过得愉快。
>>> import pandas as pd
>>> 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