Dataframe 如何用Julia数据帧中缺少的值替换伪值?
我有一组来自英国的天气数据 数据集包括温度和降雨量等,并使用-9999作为虚拟值来表示缺少的数据Dataframe 如何用Julia数据帧中缺少的值替换伪值?,dataframe,julia,Dataframe,Julia,我有一组来自英国的天气数据 数据集包括温度和降雨量等,并使用-9999作为虚拟值来表示缺少的数据 我想在数据帧中将该值替换为缺失,这样它就不会包含在统计计算或绘图中。在创建数据帧时,有没有办法做到这一点?或者可以在创建数据帧后执行此操作?以下示例定义了一个函数(名为val2missing),用缺失的替换指定值,然后使用广播符号应用此函数。该示例首先生成一个带有9999.0的随机数据集(用于模拟天气数据)(该数据位于df)。然后,它使用df中的缺失值创建df2: julia> using D
我想在数据帧中将该值替换为
缺失
,这样它就不会包含在统计计算或绘图中。在创建数据帧时,有没有办法做到这一点?或者可以在创建数据帧后执行此操作?以下示例定义了一个函数(名为val2missing
),用缺失的替换指定值,然后使用
广播符号应用此函数。该示例首先生成一个带有9999.0的随机数据集(用于模拟天气数据)(该数据位于df
)。然后,它使用df
中的缺失值创建df2
:
julia> using DataFrames, Missings
julia> df = DataFrame(x=rand(10),y=[rand()<0.3 ? 9999.0 : rand() for i=1:10])
10×2 DataFrames.DataFrame
│ Row │ x │ y │
├─────┼──────────┼───────────┤
│ 1 │ 0.926893 │ 0.9355 │
│ 2 │ 0.961057 │ 9999.0 │
│ 3 │ 0.308849 │ 9999.0 │
│ 4 │ 0.936876 │ 0.303936 │
│ 5 │ 0.541762 │ 0.5957 │
│ 6 │ 0.953278 │ 9999.0 │
│ 7 │ 0.987931 │ 9999.0 │
│ 8 │ 0.904365 │ 0.0227427 │
│ 9 │ 0.640827 │ 0.960697 │
│ 10 │ 0.66238 │ 0.769464 │
julia> val2missing(v,mv) = mv == v ? missing : v
val2missing (generic function with 1 method)
julia> df2 = DataFrame(x=df[:x], y=val2missing.(df[:y],9999.0))
10×2 DataFrames.DataFrame
│ Row │ x │ y │
├─────┼──────────┼───────────┤
│ 1 │ 0.926893 │ 0.9355 │
│ 2 │ 0.961057 │ missing │
│ 3 │ 0.308849 │ missing │
│ 4 │ 0.936876 │ 0.303936 │
│ 5 │ 0.541762 │ 0.5957 │
│ 6 │ 0.953278 │ missing │
│ 7 │ 0.987931 │ missing │
│ 8 │ 0.904365 │ 0.0227427 │
│ 9 │ 0.640827 │ 0.960697 │
│ 10 │ 0.66238 │ 0.769464 │
julia>使用数据帧、丢失
julia>df=DataFrame(x=rand(10),y=[rand()val2missing(v,mv)=mv==v?缺少:v
val2missing(带1方法的通用函数)
julia>df2=DataFrame(x=df[:x],y=val2missing.(df[:y],9999.0))
10×2数据帧。数据帧
│ 一行│ x│ Y│
├─────┼──────────┼───────────┤
│ 1.│ 0.926893│ 0.9355│
│ 2.│ 0.961057│ 丢失的│
│ 3.│ 0.308849│ 丢失的│
│ 4.│ 0.936876│ 0.303936│
│ 5.│ 0.541762│ 0.5957│
│ 6.│ 0.953278│ 丢失的│
│ 7.│ 0.987931│ 丢失的│
│ 8.│ 0.904365│ 0.0227427│
│ 9│ 0.640827│ 0.960697│
│ 10│ 0.66238│ 0.769464│
除Dan Getz提出的建议外,还有两种选择:
使用recode
功能
我用丹的例子:
julia> df = DataFrame(x=rand(10),y=[rand()<0.3 ? 9999.0 : rand() for i=1:10])
10×2 DataFrames.DataFrame
│ Row │ x │ y │
├─────┼───────────┼──────────┤
│ 1 │ 0.856388 │ 0.322763 │
│ 2 │ 0.360254 │ 9999.0 │
│ 3 │ 0.229875 │ 0.906697 │
│ 4 │ 0.275965 │ 0.485042 │
│ 5 │ 0.126336 │ 0.205509 │
│ 6 │ 0.879974 │ 0.752962 │
│ 7 │ 0.0518579 │ 9999.0 │
│ 8 │ 0.512231 │ 0.759513 │
│ 9 │ 0.309586 │ 9999.0 │
│ 10 │ 0.616471 │ 0.978771 │
julia> df[:y] = recode(df[:y], 9999.0=>missing)
10-element Array{Union{Float64, Missings.Missing},1}:
0.322763
missing
0.906697
0.485042
0.205509
0.752962
missing
0.759513
missing
0.978771
julia> df
10×2 DataFrames.DataFrame
│ Row │ x │ y │
├─────┼───────────┼──────────┤
│ 1 │ 0.856388 │ 0.322763 │
│ 2 │ 0.360254 │ missing │
│ 3 │ 0.229875 │ 0.906697 │
│ 4 │ 0.275965 │ 0.485042 │
│ 5 │ 0.126336 │ 0.205509 │
│ 6 │ 0.879974 │ 0.752962 │
│ 7 │ 0.0518579 │ missing │
│ 8 │ 0.512231 │ 0.759513 │
│ 9 │ 0.309586 │ missing │
│ 10 │ 0.616471 │ 0.978771 │
创建数据帧时检测缺失
s
这里它取决于您用来加载数据的包。例如,如果您使用CSV.jl,您可以添加null=“-9999”
关键字参数到CSV。阅读
。在更复杂的情况下,您可以使用转换
关键字参数,例如,使用Dan在那里提出的调整版val2missing
。BogumiłKamiński我正在使用您最近的教程学习数据帧。感谢您这么做。数据采用固定宽度格式,应用程序显然,CSV.jl中没有用于该格式的函数。也许您可以对此进行补救。这里有一个示例数据文件,我编写了一个函数将fwf文件加载到数据帧中。我的函数在这里,我使用了您的colwise/recode建议。再次感谢。现在,我如何将您的答案标记为已接受?因为您已经手动计算了列位置probably没有什么需要改进的(可能是代码清理-例如,将列名、宽度和解析器函数保留在一个数组中)。您可以使用我的软件包中的scan
函数自动检测列,但您已经这样做了。有一个警告:您的代码适用于ASCII文本(幸运的是您有ASCII数据),但它在通用UTF-8文本上会失败,但这是一个单独的问题(FWF.jl将处理此问题)。若要将答案标记为已接受,您可以单击我的答案旁边的复选标记。自述文件中给出了列宽,因此很容易将列宽放入read__dly.jl代码中。此数据集不存在UTF-8文本问题,但我将研究FWF.jl以了解如何将其应用于其他数据。再次感谢。请继续与Julia!FW合作F.jl现在是WIP,只在Julia 0.7上工作(0.7中重新设计了字符串基础结构,这是向后不兼容的)。关键问题是UTF-8需要小心,因为在这种情况下应该使用字符索引而不是字节索引的跳转-这就是nextind
的设计目的。非常好。我将不得不等到我的发行版(Fedora)的软件存储库中提供了Julia 0.7但仔细想想,我感兴趣的领域,天气和气候的数据可能是ascii格式的。
julia> DataFrame(colwise(x -> recode(x, 9999.0=>missing), df), names(df))
10×2 DataFrames.DataFrame
│ Row │ x │ y │
├─────┼───────────┼──────────┤
│ 1 │ 0.856388 │ 0.322763 │
│ 2 │ 0.360254 │ missing │
│ 3 │ 0.229875 │ 0.906697 │
│ 4 │ 0.275965 │ 0.485042 │
│ 5 │ 0.126336 │ 0.205509 │
│ 6 │ 0.879974 │ 0.752962 │
│ 7 │ 0.0518579 │ missing │
│ 8 │ 0.512231 │ 0.759513 │
│ 9 │ 0.309586 │ missing │
│ 10 │ 0.616471 │ 0.978771 │