如何使用丢失的CSV.read

时间:2018-02-19 23:14:32

标签: csv julia

当我通过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

1 个答案:

答案 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           │