朱莉娅 - 频率表转换为数据框架(DataFrame)

3
我刚发现了这个包FreqTables,它可以让你从DataFrames(我使用的是DataFrames.jl)中轻松构建频率表。
以下代码行将返回一个频率表:
df = CSV.read("exampledata.csv")
freqtable(df,:col_name)

我想知道如何将输出再次转换为数据框。 频率表函数的输出似乎是一个NamedArray,而我无法将其转换为数据框。

3个回答

4
这并不直接回答你的问题,但是你可以使用频率表来代替,只需编写以下内容:
julia> df = DataFrame(A = [2,2,2,2,5,5,5])
7×1 DataFrame
│ Row │ A     │
│     │ Int64 │
├─────┼───────┤
│ 12     │
│ 22     │
│ 32     │
│ 42     │
│ 55     │
│ 65     │
│ 75     │

julia> combine(groupby(df, :A), nrow => :Freq)
2×2 DataFrame
│ Row │ A     │ Freq  │
│     │ Int64Int64 │
├─────┼───────┼───────┤
│ 124     │
│ 253

获得相同的结果


不知道这个 :Freq,这个很好知道! - Davi Barreira

3

我发现这个解决方案对我有效:

using DataFrames, FreqTables
ft = freqtable(df, :A)
df = DataFrame(A = [2,2,2,2,5,5,5], B = [1,1,1,6,6,6,6])
DataFrame(A = names(ft)[1], Freq = ft)

结果:

2×2 DataFrame
│ Row │ A     │ Freq  │
│     │ Int64 │ Int64 │
├─────┼───────┼───────┤
│ 1   │ 2     │ 4     │
│ 2   │ 5     │ 3     │

DataFrame(A=names(ft)[1], Freq=ft)就足够了。 - Bogumił Kamiński
谢谢指出,我会更新我的答案。 - René

0
将命名矩阵转换为数据框的方法对于一个或多个列是不同的。
对于一个列的频率,
using DataFrames, FreqTables
df = DataFrame(A = [2,2,2,2,5,5,5], B = [1,1,1,6,6,6,6])
ft = freqtable(df, :A)
DataFrame(A = names(ft)[1], Freq=ft)

如果freqtable是从两列以上获得的,
ft = freqtable(df, :A, :B)
df_ft = DataFrame(ft |> Array, names(ft)[2] .|> string)
df_ft[:, :row] = names(ft)[1]

需要注意的是,在Julia中不允许更改索引。请参考这篇文章。 在Julia数据框中是否可以将选定的列设置为索引?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接