小编Bog*_*ski的帖子

将多个函数应用于 Julia DataFrames.jl 中的单个列

我想轻松地将多个函数应用于 Julia 数据框中的单个列。这是 Julia Academy 上 DataFrames.jl 课程笔记本 5 中的一个简单示例。

Bogumil 向我们展示了jumps通过执行以下操作轻松计算列的平均值:

combine(df, :jumps => mean)
Run Code Online (Sandbox Code Playgroud)
jumps_mean
Float64
1 2.7186

但是如果我想应用多个函数jumps来获得多个汇总统计呢?到目前为止,我可以使以下内容起作用:

combine(df, :jumps => (x -> [(mean(x), std(x), minimum(x), maximum(x))]) => [:mean, :std, :min, :max])
Run Code Online (Sandbox Code Playgroud)
意思 标准 最大限度 分钟
Float64 Float64 64位 64位
1 2.7186 0.875671 2 11

是否有更简洁的语法来执行此操作,而无需将函数返回包装起来[ ]或专门使用匿名函数?

例如,我想做:

combine(df, :jumps => (mean, std, minimum, maximum))
Run Code Online (Sandbox Code Playgroud)

dataframe julia

5
推荐指数
1
解决办法
111
查看次数

LinearInterpolation 不适用于 DataFrames.jl 中的转换

我定义了以下线性插值器:

\n
julia> using DataFrames, Interpolations\n\njulia> xs = 1:0.2:5;\n\njulia> ys = log.(xs);\n\njulia> li = LinearInterpolation(xs, ys);\n
Run Code Online (Sandbox Code Playgroud)\n

并有一个数据框:

\n
julia> df = DataFrame(x=2:0.1:3)\n11\xc3\x971 DataFrame\n Row \xe2\x94\x82 x\n     \xe2\x94\x82 Float64\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n   1 \xe2\x94\x82     2.0\n   2 \xe2\x94\x82     2.1\n   3 \xe2\x94\x82     2.2\n   4 \xe2\x94\x82     2.3\n   5 \xe2\x94\x82     2.4\n   6 \xe2\x94\x82     2.5\n   7 \xe2\x94\x82     2.6\n   8 \xe2\x94\x82     2.7\n   9 \xe2\x94\x82     2.8\n  10 \xe2\x94\x82     2.9\n  11 \xe2\x94\x82     3.0\n
Run Code Online (Sandbox Code Playgroud)\n

我可以将:x数据框的列传递给li递给这样的:

\n
julia> li(df.x)\n11-element Vector{Float64}:\n 0.6931471805599453\n 0.7408022704621078\n 0.7884573603642704\n 0.831963048859085\n 0.8754687373538997\n 0.915490091190668\n 0.9555114450274363\n 0.9925654311042973\n …
Run Code Online (Sandbox Code Playgroud)

interpolation dataframe julia

5
推荐指数
1
解决办法
288
查看次数

朱莉娅不精确错误:Int64

我是朱莉娅的新手。得到这个 InexactError 。提到我曾尝试预先转换为浮点数但没有奏效,也许我做错了什么。

column = df[:, i]  
max = maximum(column)
min = minimum(column)
scaled_column = (column .- min)/max   # This is the error, I think
df[:, i] = scaled_column
Run Code Online (Sandbox Code Playgroud)
julia> VERSION
v"1.4.2"
Run Code Online (Sandbox Code Playgroud)

error-handling dataframe julia

4
推荐指数
1
解决办法
1659
查看次数

如何处理 Julia 中布尔上下文中的缺失?

我正在尝试根据来自其他(数字)列的值范围创建一个分类变量。但是,当我missings在数字列中时,代码不起作用

这是一个可复制的示例:

using RDatasets;
using DataFrames;
using Pipe;
using FreqTables;

df = dataset("datasets","iris")
#lowercase columns just for convenience
@pipe df |> rename!(_, [lowercase(k) for k in names(df)]);

#without this line, the code works fine
@pipe df |> allowmissing!(_, :sepallength) |> replace!(_.sepallength, 4.9 => missing);

df[:size] = @. ifelse(df[:sepallength]<=4.7, "small", missing)
df[:size] = @. ifelse((df[:sepallength]>4.7) & (df[:sepallength]<=4.9), "avg", df[:size])
df[:size] = @. ifelse((df[:sepallength]>4.9) & (df[:sepallength]<=5), "large", df[:size])
df[:size] = @. ifelse(df[:sepallength]>5, "huge", df[:size])

println(@pipe df |> freqtable(_, :size))
Run Code Online (Sandbox Code Playgroud)

输出: …

missing-data dataframe julia

4
推荐指数
1
解决办法
217
查看次数

如何在 JuMP 中指定一个只能为 0 或 1 的变量?

在 JuMP 优化问题中指定只能为 0 或 1 的变量的语法是什么?

我正在使用以下代码:

@variable(mod, X == 1 || 0)
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

julia julia-jump

4
推荐指数
1
解决办法
48
查看次数

过滤行和附加值

我想过滤数据帧并将值附加到数据帧中的新/现有列。例如,在下面的数据框中,我想将 0.7 的值附加到列 pre-mean 中,其中月份值等于 11。所以换句话说,pre_mean 列的第 2 到 5 行应该包含 0.7 的值,而所有其他列都应该有一个 NaN 值。

我试过这样的事情,但当然这是不正确的。

df[:pre_mean] = ifelse.(df[:month] .== 11, 0.7, df)
Run Code Online (Sandbox Code Playgroud)

在 python 中,你可以使用 pd.apply 或 np.where 函数来做到这一点,

#How to do in python
df["pre_mean"] = np.where(df["month"] == 11, 0.7, None)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何在 Julia 中实现这一目标?有任何想法吗?

在此处输入图片说明

dataframe julia

4
推荐指数
2
解决办法
63
查看次数

无法过滤从箭头表创建的 DataFrame

我在 julia 中有以下函数,用于读取 Arrow 文件(使用 Arrow.jl)以从磁盘读取数据并处理它:

function getmembershipsdays(fromId, toId)
  memberships = Arrow.Table("HouseholdMemberships.arrow") |> DataFrame
  filter!([:IndividualId] => id -> id >= fromId && id <= toId, memberships)
  ...
end

> Error: ERROR: LoadError: MethodError: no method matching
> deleteat!(::Arrow.Primitive{Int64,Array{Int64,1}}, ::Array{Int64,1})

The DataFrame has the following structure:
123226x10 DataFrame
Row | MembershipId | IndividualId | HouseholdId | ...
    | Int64        | Int64        | Int64       |
Run Code Online (Sandbox Code Playgroud)

函数中用于单步执行 Dataframe 的其余代码有效,但如果添加过滤条件,则会出现此错误。就好像 Dataframe 列没有转换为底层的 julia 类型。

如果我做

m = filter([:IndividualId] => id -> id >= fromId …
Run Code Online (Sandbox Code Playgroud)

dataframe julia apache-arrow

4
推荐指数
1
解决办法
317
查看次数

DataFrames.jl 中唯一值组合汇总表

我经常想在数据表中找到一些分组变量的独特组合。使用 R + dplyr,我的正常工作流程是 combine groupby(data, var1, var2, var3) %>% summarise,它返回一个新表,其中包含var1var2var3、 中的每个唯一值组合对应一行data

在 DataFrames.jl 中执行此操作的惯用方法是什么?

dataframe julia

4
推荐指数
2
解决办法
49
查看次数

Julia DataFrames 从多列中过滤

我想根据来自不同列的多个值过滤 DataFrame。我写了下面的代码,但它给了我一个错误,ERROR: TypeError: non-boolean (BitArray{1}) used in boolean context.

df[((df.eruption .== "CC2011") && (df.dataset .== "MODIS.NDVI.CDI")), :]
Run Code Online (Sandbox Code Playgroud)

在哪里eruptiondataset在数据帧列

任何想法我做错了什么?

dataframe julia

4
推荐指数
2
解决办法
622
查看次数

查找数据框中具有某些缺失值的列的子集

给定 DataFrames.jl 中的以下数据框:

\n
julia> using DataFrames\n\njulia> df = DataFrame(x1=[1, 2, 3], x2=Union{Int,Missing}[1, 2, 3], x3=[1, 2, missing])\n3\xc3\x973 DataFrame\n Row \xe2\x94\x82 x1     x2      x3\n     \xe2\x94\x82 Int64  Int64?  Int64?\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n   1 \xe2\x94\x82     1       1        1\n   2 \xe2\x94\x82     2       2        2\n   3 \xe2\x94\x82     3       3  missing\n
Run Code Online (Sandbox Code Playgroud)\n

我想找到missing其中包含价值的列。

\n

我努力了:

\n
julia> names(df, Missing)\nString[]\n
Run Code Online (Sandbox Code Playgroud)\n

但这是不正确的,因为names函数在传递类型时会查找传递类型的子类型。

\n

missing-data dataframe julia

4
推荐指数
1
解决办法
93
查看次数