当我通过CSV.read()读取CSV文件时,我遇到了更换NA的问题。数据集包含名为NA的缺失值。如果我这样试试:
dax = CSV.read("dax.dat"; delim='\t', decimal=',', dateformat="dd.mm.yyyy", null="NA")
我收到以下错误消息:
MethodError: Cannot `convert` an object of type WeakRefString{UInt8} to an object of type Missings.Missing
如果我按以下方式阅读文件:
dax = CSV.read("dax.dat"; delim='\t', decimal=',', dateformat="dd.mm.yyyy")
具有NA值的列被读取为字符串...数据集看起来像(中间的快照):
09.11.1995 NA 120.155 7.861 17.616 8.198 12.316
10.11.1995 NA 119.17 7.777 17.51 8.308 12.221
13.11.1995 NA 119.305 7.861 17.51 8.351 12.221
14.11.1995 NA 121.498 7.897 17.582 8.206 12.403
15.11.1995 NA 120.558 7.859 17.395 8.223 12.292
16.11.1995 NA 121.095 8.053 17.558 8.377 12.364
17.11.1995 9,715 121.677 8.091 17.625 8.223 12.395
20.11.1995 9,484 122.707 8.13 17.764 8.181 12.53
21.11.1995 9,446 121.319 8.017 17.616 8.181 12.427
22.11.1995 9,574 120.871 7.963 17.577 8.121 12.372
23.11.1995 9,619 119.663 8.004 17.558 8.13 12.206
我怎么能管理它,NA被读作缺失?
可以在此处找到完整的数据集:https://www.dropbox.com/s/drdzstpiyrvw5kc/dax.dat?dl=0
答案 0 :(得分:2)
使用rows_for_type_detect
足够大,以便您在每个相关列中阅读除"NA"
之外的其他内容:
julia> dax = CSV.read("dax.dat"; delim='\t', decimal=',', dateformat="dd.mm.yyyy", null="NA", rows_for_type_detect=11000);
julia> showcols(dax)
11096×31 DataFrames.DataFrame
│ Col # │ Name │ Eltype │ Missing │ Values │
├───────┼───────────────────────┼──────────────────────────────────┼─────────┼───────────────────────────┤
│ 1 │ Date │ Date │ 0 │ 1973-01-01 … 2015-07-13 │
│ 2 │ ADIDAS │ Union{Float64, Missings.Missing} │ 5969 │ missing … 69.847 │
│ 3 │ ALLIANZ │ Float64 │ 0 │ 6.943 … 148.756 │
│ 4 │ BASF │ Float64 │ 0 │ 3.826 … 83.348 │
│ 5 │ BAYER │ Float64 │ 0 │ 5.862 … 135.89 │
│ 6 │ BEIERSDORF │ Float64 │ 0 │ 1.672 … 77.625 │
│ 7 │ BMW │ Float64 │ 0 │ 1.644 … 95.14 │
│ 8 │ COMMERZBANK │ Float64 │ 0 │ 44.386 … 11.646 │
│ 9 │ CONTINENTAL │ Float64 │ 0 │ 4.228 … 214.5 │
│ 10 │ DAIMLER │ Union{Float64, Missings.Missing} │ 6735 │ missing … 83.368 │
│ 11 │ DEUTSCHE BANK │ Float64 │ 0 │ 9.67 … 29.337 │
│ 12 │ DEUTSCHE BOERSE │ Union{Float64, Missings.Missing} │ 7329 │ missing … 83.05 │
│ 13 │ DEUTSCHE POST │ Union{Float64, Missings.Missing} │ 7274 │ missing … 28.344 │
│ 14 │ DEUTSCHE TELEKOM │ Union{Float64, Missings.Missing} │ 6229 │ missing … 16.545 │
│ 15 │ E ON │ Float64 │ 0 │ 2.194 … 12.369 │
│ 16 │ FRESENIUS MED.CARE │ Union{Float64, Missings.Missing} │ 6197 │ missing … 77.352 │
│ 17 │ FRESENIUS │ Union{Float64, Missings.Missing} │ 5114 │ missing … 61.234 │
│ 18 │ HEIDELBERGCEMENT │ Float64 │ 0 │ 9.113 … 73.201 │
│ 19 │ HENKEL │ Union{Float64, Missings.Missing} │ 6131 │ missing … 89.24 │
│ 20 │ INFINEON TECHNOLOGIES │ Union{Float64, Missings.Missing} │ 7094 │ missing … 11.27 │
│ 21 │ K + S │ Float64 │ 0 │ 0.757 … 37.848 │
│ 22 │ LANXESS │ Union{Float64, Missings.Missing} │ 8370 │ missing … 54.341 │
│ 23 │ LINDE │ Float64 │ 0 │ 6.239 … 178.101 │
│ 24 │ DEUTSCHE LUFTHANSA │ Float64 │ 0 │ 2.675 … 12.299 │
│ 25 │ MERCK KGAA │ Union{Float64, Missings.Missing} │ 5949 │ missing … 94.85 │
│ 26 │ MUENCHENER RUCK. │ Float64 │ 0 │ 2.896 … 171.1 │
│ 27 │ RWE │ Float64 │ 0 │ 5.95 … 19.969 │
│ 28 │ SAP │ Union{Float64, Missings.Missing} │ 4133 │ missing … 65.98 │
│ 29 │ SIEMENS │ Float64 │ 0 │ 6.86 … 93.7 │
│ 30 │ THYSSENKRUPP │ Float64 │ 0 │ 3.449 … 23.941 │
│ 31 │ VOLKSWAGEN │ Float64 │ 0 │ 6.668 … 205.9 │