请参阅查找给定两个数字下限和上限之间的素数的 Python 代码:
\nlower = 3\nupper = 15\n\nprint("Prime numbers between", lower, "and", upper, "are:")\n\nfor num in range(lower, upper + 1):\n\n for i in range(2, num):\n if (num % i) == 0:\n break\n else:\n print(num)\n
Run Code Online (Sandbox Code Playgroud)\nPython输出:
\nlower = 3\nupper = 15\n\nprint("Prime numbers between", lower, "and", upper, "are:")\n\nfor num in range(lower, upper + 1):\n\n for i in range(2, num):\n if (num % i) == 0:\n break\n else:\n print(num)\n
Run Code Online (Sandbox Code Playgroud)\nJulia 中几乎类似的代码给出了错误的输出。请参阅下面的 Julia 代码:
\nlower = 3\nupper = 15\nprintln("Prime …
Run Code Online (Sandbox Code Playgroud) 给定一个JSON文件,JSON包很乐意解析它.但是,如果我想将它作为DataFrame(或任何其他柱状数据结构),那么获得它的好方法是什么?
目前,例如,我有:
using JSON
using DataFrames
json_str = """
[{ "color": "red", "value": "#f00" }, { "color": "green", "value": "#0f0" },
{ "color": "blue", "value": "#00f" }, { "color": "cyan", "value": "#0ff" },
{ "color": "magenta", "value": "#f0f" }, { "color": "yellow", "value": "#ff0" },
{ "color": "black", "value": "#000" } ]
"""
function jsontodf(a)
ka = union([keys(r) for r in a]...)
df = DataFrame(;Dict(Symbol(k)=>get.(a,k,NA) for k in ka)...)
return df
end
a = JSON.Parser.parse(json_str)
jsontodf(a)
Run Code Online (Sandbox Code Playgroud)
这导致:
7×2 DataFrames.DataFrame
? …
Run Code Online (Sandbox Code Playgroud) 我正在使用 Julia 的 DataFrames.jl 包。在其中,我有一个数据框,其中包含一个包含字符串列表的列(例如 ["Type A"、"Type B"、"Type D"])。那么如何执行one-hot编码?我无法在 DataFrames.jl 包中找到预构建的函数。
这是我想要做的一个例子:
Original Dataframe
col1 | col2 |
102 |[a] |
103 |[a,b] |
102 |[c,b] |
Run Code Online (Sandbox Code Playgroud)
After One-hot encoding
col1 | a | b | c |
102 | 1 | 0 | 0 |
103 | 1 | 1 | 0 |
102 | 0 | 1 | 1 |
Run Code Online (Sandbox Code Playgroud) 我正在 Julia 中寻找一个函数,它可以采用类似于此 R 代码的值:
rep(1, ncol(X))
Run Code Online (Sandbox Code Playgroud)
我知道我可以将 DataFrames 包用于R 中length
的ncol()
函数,但我rep
在 Julia 中找不到函数。谢谢!
在 DataFrames.jl 中查找 DataFrame 中的行的规范方法是什么?
\n例如,给定这个 DataFrame:
\n\xe2\x94\x82 Row \xe2\x94\x82 uuid \xe2\x94\x82 name \n\xe2\x94\x82 \xe2\x94\x82 String \xe2\x94\x82 String \n\xe2\x94\x9c\xe2\x94\x80\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\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\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\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n\xe2\x94\x82 1 \xe2\x94\x82 0efae8bf-39e6-5d65-b05d-c8947f4cee2a \xe2\x94\x82 COSMA_jll \n\xe2\x94\x82 2 \xe2\x94\x82 17ccb2e5-db19-44b3-b354-4fd16d92c74e \xe2\x94\x82 CitableImage \n
Run Code Online (Sandbox Code Playgroud)\n鉴于名称“CitableImage”,检索 uuid 的最佳方法是什么?
\nfor i=1:5
if(i==1)
z = i
end
println("i = $i, z = $z")
end
i = 1, z = 1
ERROR: UndefVarError: z not defined
Stacktrace:
[1] top-level scope at ./REPL[6]:5 [inlined]
[2] top-level scope at ./none:0
Run Code Online (Sandbox Code Playgroud)
上面脚本的行为令我感到困惑。有人可以帮我理解为什么当i = 1时打印有效,而当i = 2时打印失败。
我得到了一个看起来像这样的数据集
并且我试图将第一列上所有带有 1 的点与带有 0 的点分开,但我想将它们放在同一个图表中。
但是我找不到过滤 Julia 中的点的方法。我在我的项目中使用了 LinearAlgebra、CSV、Plots、DataFrames,到目前为止我还没有找到一种方法来使 DataFrames 存储类型与 Plots 函数很好地协同工作。我不断Cannot convert Float64 to series data for plotting
遇到错误,例如当我尝试使用 for 循环作为过滤器单独绘制点时,如下面的代码所示
filter = select(data, :1)
newData = select(data, 2:3)
#graph one initial point to create the plot
plot(newData[1,1], newData[1,2], seriestype = :scatter, title = "My Scatter Plot")
#add the additional points with the 1 in front
for i in 2:size(newData)
if filter[i] == 1
plot!(newData[i, 1], newData[i, 2], seriestype = :scatter, title = "My Scatter …
Run Code Online (Sandbox Code Playgroud) 我注意到,当将大型数据帧保存为 CSV 时,内存分配比内存中数据帧的大小(或磁盘上 CSV 文件的大小)高一个数量级,至少高出 10 倍。 为什么这是案件?有没有办法防止这种情况?即有没有一种方法可以将数据帧保存到磁盘而不使用比实际数据帧更多的内存?
在下面的示例中,我生成了一个包含一个整数列和 10m 行的数据框。它重 76MB,但写入 CSV 分配了 1.35GB。
using DataFrames, CSV
function generate_df(n::Int64)
DataFrame!(a = 1:n)
end
Run Code Online (Sandbox Code Playgroud)
julia> @time tmp = generate_df2(10000000);
0.671053 seconds (2.45 M allocations: 199.961 MiB)
julia> Base.summarysize(tmp) / 1024 / 1024
76.29454803466797
julia> @time CSV.write("~/tmp/test.csv", tmp)
3.199506 seconds (60.11 M allocations: 1.351 GiB)
Run Code Online (Sandbox Code Playgroud) 我想轻松地将多个函数应用于 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) 假设我有以下数据框:
\njulia> using DataFrames\n\njulia> df = DataFrame(id=["a", "b", "a", "b", "b"], v=[1, 1, 1, 1, 2])\n5\xc3\x972 DataFrame\n Row \xe2\x94\x82 id v\n \xe2\x94\x82 String 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\n 1 \xe2\x94\x82 a 1\n 2 \xe2\x94\x82 b 1\n 3 \xe2\x94\x82 a 1\n 4 \xe2\x94\x82 b 1\n 5 \xe2\x94\x82 b 2\n
Run Code Online (Sandbox Code Playgroud)\n:v
我想计算由 column 定义的每个组中的唯一值的数量:id
。我尝试了以下方法:
julia> gdf = groupby(df, :id)\nGroupedDataFrame with 2 groups based on key: id\nFirst Group (2 rows): id = "a"\n Row \xe2\x94\x82 id v\n \xe2\x94\x82 String 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\n 1 \xe2\x94\x82 …
Run Code Online (Sandbox Code Playgroud)