在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
相关产品推荐
相关产品推荐

