我正在尝试将一些数据读入 julia 到数据框中以使用它。.csv文件的最小示例可能如下所示:
A; B; C; D
ab; 1,23; 4; 9,2
ab; 3,4; 7; 1,1
ba; 6; 2,3; 8,6
我将以下内容加载到包中并读取数据:
using DataFrames
using CSV
d = CSV.read( "test.csv", delim=";")
朱莉娅识别以下类型:
eltypes(d)
CategoricalArrays.CategoricalString{UInt32}
String
String
String
我现在如何将整列变成浮点数,逗号被点替换?我的第一个想法是使用:
float(d[1,2])
但是我没有找到告诉朱莉娅用点替换逗号的选项。我的下一个想法是首先替换逗号,然后转换它:
float(replace(d[1,2], ",", "."))
这在单个单元格上工作正常,但不适用于整列:
float(replace(d[:,2], ",", "."))
MethodError: no method matching
replace(::WeakRefStrings.WeakRefStringArray{WeakRefString{UInt8},1,Union{}},
::String, ::String)
我也试过:
d = CSV.read( "test.csv", delim=";", decimal=",")
这也只是给出了一个错误...
任何想法如何处理这个问题以及如何有效地将数据读取到Julia中?
多谢!
此致敬意。
一种简单的方法是将文件读取为字符串,用点替换逗号小数分隔符,然后从中创建数据帧:
s = replace(readstring("test.csv"), ",", ".")
CSV.read(IOBuffer(s); delim=';', types=[String, Float64, Float64, Float64])
请注意,您可以使用 types
关键字来指定列类型(然后它将隐式分析字符串条目(。
编辑:根据这个github问题,CSV.jl的read
方法支持decimal
关键字(从v0.2.0版本开始(,它允许你做
CSV.read("test.csv"; delim=';', decimal=',', types=[String, Float64, Float64, Float64])
编辑:删除了从DataFrames.jl替代使用readtable
的提示,因为它似乎已被弃用以支持CSV.read
。