如何在julia dataframe中获取列的数据类型

如何在julia dataframe中获取列的数据类型,julia,Julia,如何获取julia中所有列和特定列的数据类型。具体来说,在julia中,pandas与df.dtypes的等价物是什么 比如说,, 我有一个类似下面的df │ Row │ Id │ name │ item location │ │ │ Int64 │ String │ String │ ├─────┼───────┼────────┼───────────────┤ │ 1 │ 1 │ A │ xyz │ │ 2 │

如何获取julia中所有列和特定列的数据类型。具体来说,在julia中,pandas与df.dtypes的等价物是什么

比如说,, 我有一个类似下面的df

│ Row │ Id    │ name   │ item location │
│     │ Int64 │ String │ String        │
├─────┼───────┼────────┼───────────────┤
│ 1   │ 1     │ A      │ xyz           │
│ 2   │ 2     │ B      │ abc           │
│ 3   │ 3     │ C      │ def           │
│ 4   │ 4     │ D      │ ghi           │
│ 5   │ 5     │ E      │ xyz           │
│ 6   │ 6     │ F      │ abc           │
│ 7   │ 7     │ G      │ def           │
│ 8   │ 8     │ H      │ ghi           │
│ 9   │ 9     │ I      │ xyz           │
│ 10  │ 10    │ J      │ abc           │
预期产出:

{'id':  Int64, 'name': String, 'item location': String}

如何获取数据类型,即,
Int64│ 一串│ String
在Julia?

中,您指定了两种不同的预期输出,因此我在这里演示如何获得这两种输出:

julia> df = DataFrame("Id" => 1, "name" => "A", "item_location" => "xyz")
1×3 DataFrame
│ Row │ Id    │ name   │ item_location │
│     │ Int64 │ String │ String        │
├─────┼───────┼────────┼───────────────┤
│ 1   │ 1     │ A      │ xyz           │

julia> eltype.(eachcol(df))
3-element Array{DataType,1}:
 Int64
 String
 String

julia> Dict(names(df) .=> eltype.(eachcol(df)))
Dict{String,DataType} with 3 entries:
  "Id"            => Int64
  "name"          => String
  "item_location" => String
此外,如果您想将结果存储在
数据框中而不是
Dict中,您可以编写(请参见
mapcols
文档):

如果您想让一个名为tuple的
存储此信息,请编写(Tables.columntable
的文档如下所示):


(在本例中,请注意,对于非常宽的表,这可能会有一些额外的编译成本,因为每次调用它时,您可能会得到一种新类型的
命名为tuple

您还可以使用
描述(df)
,这是了解数据帧中列的一个通用工具。

这正是我想要的。如果您添加官方文档的链接,那就太好了。好处是基本解决方案不是DataFrames.jl特定的。它只是应用于数据帧的Julia Base。这在朱莉娅身上很常见,因为一切都安排得很好。我们只使用广播(the
)、
eltype
(从Base开始)和
eachcol
(也从Base开始)
mapcols
表格。columntable
是特定于包的-我将为它们添加指向文档的链接。一般来说,这与Pandas的理念截然不同,Pandas将大部分功能打包到一个包中。在Julia中,包可以有更有限的API,因为多个分派可以处理组合部分。哦,这真是太好了。我是一个天真的学习者。因为我是朱莉娅的新朋友,如果我的问题对朱莉娅社区来说是愚蠢的,那么对不起。相反,这些都是很好的问题。对于刚接触朱莉娅的人来说,要知道的关键是:1)你应该好好学习基本朱莉娅,2)大多数软件包都会尝试最大限度地利用这些知识。从长远来看(在学习基础之后),这意味着当你开始使用一个新软件包时,你需要学习的东西要少得多,而且你可以期待两个完全不相关的软件包在开箱即用、没有任何粘合界面的情况下“一起工作”。一个很好的例子是混合微分方程和深度学习包;每个列和数据类型中的变量名称、平均值、最小值、中值、最大值、nunique和nmissing。干得好
julia> mapcols(eltype, df)
1×3 DataFrame
│ Row │ Id       │ name     │ item_location │
│     │ DataType │ DataType │ DataType      │
├─────┼──────────┼──────────┼───────────────┤
│ 1   │ Int64    │ String   │ String        │
julia> map(eltype, Tables.columntable(df))
(Id = Int64, name = String, item_location = String)