You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何修改Pandas DataFrame中的值后,数值仅显示为整数而非小数形式?

为什么修改DataFrame值后小数没显示,变成了整数?

这个问题我之前踩过坑,核心原因很简单:你初始创建的DataFrame列是整数类型,当你往里面塞浮点数时,pandas会自动把浮点数强制转换为整数,直接截断小数部分,所以你看到的都是整数。

具体分析你的代码

你一开始用df['Values'] = range(10,15)创建列,range()生成的是纯整数序列,所以这个列的dtype会被自动设为int64(可以用df.dtypes命令查看验证)。之后你用df['Values'][x]这种链式索引给列赋值浮点数,不仅容易触发SettingWithCopyWarning(一种潜在的不安全操作警告),更关键的是整数类型的列根本存不下浮点数——pandas会默默把浮点数转成整数,比如1.11直接变成1,小数部分自然就没了。

另外提个小细节:你代码最后写的print(test)应该是print(df),不然会报NameError哦。

解决办法

这里给你几个可行的方案,按需选择:

  • 方案1:初始创建时就指定浮点数类型
    要么直接用浮点数序列初始化,要么手动把列转成float类型:

    df = pd.DataFrame()
    # 方法A:用浮点数列表初始化
    df['Values'] = [float(i) for i in range(10,15)]
    # 方法B:先创建整数列,再转换类型
    df['Values'] = range(10,15)
    df['Values'] = df['Values'].astype(float)
    
  • 方案2:用.loc进行安全赋值(推荐)
    链式索引df['Values'][x]属于不安全的赋值方式,改用.loc定位行和列,同时确保列是浮点数类型:

    df = pd.DataFrame()
    df['Values'] = range(10,15)
    # 先转换列类型为float
    df['Values'] = df['Values'].astype(float)
    lst = [1.11, 2.22 ,3.33,4.44,5.55]
    for x in range(0,5):
        df.loc[x, 'Values'] = lst[x]
    print(df)
    
  • 方案3:直接用目标列表初始化列(最简洁)
    其实你完全可以跳过初始的range步骤,直接把你的浮点数列表赋值给列,这样pandas会自动把列设为float类型:

    df = pd.DataFrame()
    lst = [1.11, 2.22 ,3.33,4.44,5.55]
    df['Values'] = lst
    print(df)
    

验证结果

修改后运行代码,你会得到预期的带小数的输出:

Values
0    1.11
1    2.22
2    3.33
3    4.44
4    5.55

内容的提问来源于stack exchange,提问作者Tiago Emanuel Pratas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 23:42:28