Pandas赋值单元格自动取整为0问题求助(Python3.6)
解决Pandas单元格赋值被自动取整为0的问题
这个问题我之前也碰到过,核心原因其实是Pandas列的数据类型限制,而不是你调的显示精度参数的问题,咱们一步步来解决:
首先排查根本问题:检查目标列的数据类型
你可以先运行print(df.dtypes)查看对应列的类型,如果显示是int64(整数类型),那不管你赋值多小的小数,Pandas都会自动截断取整为整数(这里就是0),而Python字典没有固定类型限制,所以能正常存储小数值。针对性解决方案:转换列的浮点类型
把目标列转换成浮点类型(比如float64)后再赋值,就不会被取整了:# 假设你的列名为target_col df['target_col'] = df['target_col'].astype('float64') # 现在再赋值小数值就正常了 df.loc[0, 'target_col'] = 0.0000000000123补充说明你调的参数为啥没用
pd.set_option('precision',50):这个只是控制控制台显示的小数位数,不影响数据的实际存储类型;pd.set_option('chop_threshold', .00000000005):这个是当数值小于设定阈值时,显示为0,但数据本身还是存储的原始值——但如果列是整数类型,连存储都存不了小数,所以这个参数也起不了作用。
如果是创建DataFrame的时候就知道要存小数值,也可以直接指定列的dtype:
df = pd.DataFrame({'target_col': [1,2,3]}, dtype='float64')
内容的提问来源于stack exchange,提问作者Alexey Yunoshev
相关产品推荐
相关产品推荐

