using DataFrames
import XLSX
df = DataFrame(XLSX.readtable(“fdjsp.xlsx”, “KC.GEFDJSP”)…)
df.值[1:5]
然后输出下面的:
5-element Vector{Any}:
“1929.846”
“1548.884”
“1066.629”
“1299.528”
“1405.254”
怎么能直接读成float类型的df?还是需要再单独转换一次?怎么操作?谢谢
现在我是拿for循环一个一个改的,可以实现,但有没有什么更高效的方式?
发现把文件改成csv格式后,读取时可以自动正确识别数据类型,但是excel文件不行。
参考DataFrames.jl的文档,可以用identity.()函数。
https://dataframes.juliadata.org/stable/man/importing_and_exporting/
以下是文档中的例子
julia> using DelimitedFiles, DataFrames
julia> data, header = readdlm(joinpath(dirname(pathof(DataFrames)),
"..", "docs", "src", "assets", "iris.csv"),
',', header=true);
julia> iris_raw = DataFrame(data, vec(header))
150×5 DataFrame
Row │ SepalLength SepalWidth PetalLength PetalWidth Species
│ Any Any Any Any Any
─────┼──────────────────────────────────────────────────────────────────
1 │ 5.1 3.5 1.4 0.2 Iris-setosa
2 │ 4.9 3.0 1.4 0.2 Iris-setosa
3 │ 4.7 3.2 1.3 0.2 Iris-setosa
4 │ 4.6 3.1 1.5 0.2 Iris-setosa
5 │ 5.0 3.6 1.4 0.2 Iris-setosa
6 │ 5.4 3.9 1.7 0.4 Iris-setosa
7 │ 4.6 3.4 1.4 0.3 Iris-setosa
8 │ 5.0 3.4 1.5 0.2 Iris-setosa
⋮ │ ⋮ ⋮ ⋮ ⋮ ⋮
144 │ 6.8 3.2 5.9 2.3 Iris-virginica
145 │ 6.7 3.3 5.7 2.5 Iris-virginica
146 │ 6.7 3.0 5.2 2.3 Iris-virginica
147 │ 6.3 2.5 5.0 1.9 Iris-virginica
148 │ 6.5 3.0 5.2 2.0 Iris-virginica
149 │ 6.2 3.4 5.4 2.3 Iris-virginica
150 │ 5.9 3.0 5.1 1.8 Iris-virginica
135 rows omitted
julia> iris = identity.(iris_raw)
150×5 DataFrame
Row │ SepalLength SepalWidth PetalLength PetalWidth Species
│ Float64 Float64 Float64 Float64 SubStrin…
─────┼──────────────────────────────────────────────────────────────────
1 │ 5.1 3.5 1.4 0.2 Iris-setosa
2 │ 4.9 3.0 1.4 0.2 Iris-setosa
3 │ 4.7 3.2 1.3 0.2 Iris-setosa
4 │ 4.6 3.1 1.5 0.2 Iris-setosa
5 │ 5.0 3.6 1.4 0.2 Iris-setosa
6 │ 5.4 3.9 1.7 0.4 Iris-setosa
7 │ 4.6 3.4 1.4 0.3 Iris-setosa
8 │ 5.0 3.4 1.5 0.2 Iris-setosa
⋮ │ ⋮ ⋮ ⋮ ⋮ ⋮
144 │ 6.8 3.2 5.9 2.3 Iris-virginica
145 │ 6.7 3.3 5.7 2.5 Iris-virginica
146 │ 6.7 3.0 5.2 2.3 Iris-virginica
147 │ 6.3 2.5 5.0 1.9 Iris-virginica
148 │ 6.5 3.0 5.2 2.0 Iris-virginica
149 │ 6.2 3.4 5.4 2.3 Iris-virginica
150 │ 5.9 3.0 5.1 1.8 Iris-virginica
135 rows omitted
1 个赞
这个好像是把未认定数据类型的数据,自动识别并添加类型。对于我这种数据类型识别错误的好像不行。
你这个的数据本来就是 String
,因为你的数据含有中文的引号。“1929.846”
跟 "1929.846"
不一样,后者可以用 x-> parse(Float64,x)
解决,你这个得先处理 字符串。
1 个赞
这个数据从xlsx里读出来就是string类型,但是我把xlsx转存成csv后,从csv中读就是float。是xlsx里能直接确定数据类型吗?
这个数据从xlsx里读出来就是string类型,但是我把xlsx转存成csv后,从csv中读就是float。是xlsx里能直接确定数据类型吗?
原表格是这样的。
说明你的excel表里面这一列是以文本形式保存的。
一般从表格读取的时候,我都喜欢转换成csv来读取
x-> parse(Float64,x)
,这个方法在DataFrames中有批量方法吗?
df[!,:a]=map(x->parse(Float64,x), df[!,:a])
就这样,用 map 批量化。