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

在Julia DataFrame中将字符串格式数值转换为Float64并格式化保留两位小数

解决Julia DataFrame字符串数字格式化问题

我来帮你搞定这个转换问题!你的数据里有两种特殊格式——用空格做千位分隔符、用逗号做小数点,这也是直接用replace没达到预期的原因,咱们得按正确顺序处理这些格式,再做转换。

步骤1:准备示例数据(模拟你的场景)

先定义和你一致的DataFrame:

using DataFrames

df = DataFrame(
    "Column 1" => ["400", "120", "37", "1 500,00", "166,14", "13,95", "1 148,18"]
)

步骤2:自定义转换函数

写一个专门处理这种格式的函数,先清理字符串(去空格、换逗号为小数点),再解析成Float64:

function parse_custom_number(s::AbstractString)
    # 第一步:移除所有空格(处理千位分隔的空格)
    no_spaces = replace(s, " " => "")
    # 第二步:把逗号替换成小数点(处理欧洲式小数表示)
    normalized = replace(no_spaces, "," => ".")
    # 解析为Float64类型
    return parse(Float64, normalized)
end

步骤3:生成目标列

选项1:生成Float64类型的列

如果你需要数值类型的列(方便后续计算),直接用广播函数生成新列:

# 新建Float64类型的列
df[!, "column 1 formatted (Float64)"] = parse_custom_number.(df[!, "Column 1"])

# 如果要直接更新原列,替换上面的代码为:
# df[!, "Column 1"] = parse_custom_number.(df[!, "Column 1"])

选项2:生成保留两位小数的字符串列

如果需要的是格式化后的字符串(比如展示用),可以在转换后再格式化:

# 新建字符串列,保留两位小数
df[!, "column 1 formatted (String)"] = @. begin
    num = parse_custom_number(df[!, "Column 1"])
    # 格式化字符串,确保两位小数
    string(round(num, digits=2))
end

验证结果

运行完上面的代码后,打印DataFrame就能看到预期效果:

println(df)

输出的Float64列会是400.0, 120.0, 37.0, 1500.0, 166.14, 13.95, 1148.18,字符串列则是"400.00", "120.00", "37.00", "1500.00", "166.14", "13.95", "1148.18",完全符合你的需求。

内容的提问来源于stack exchange,提问作者hbrovell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:17:39