我想选择DataFrame的所有列,其中数据类型是Number
的子类型。但是,由于存在具有missing
值的列,因此数字列数据类型可以类似于Union{Missing, Int64}
。
到目前为止,我想到了:
using DataFrames
df = DataFrame([["a", "b"], [1, missing] ,[2, 5]])
df_numerical = df[typeintersect.(colwise(eltype, df), Number) .!= Union{}]
这将产生预期的结果。
问题
是否有更简单,惯用的方式来做到这一点?可能类似于:
df.select_dtypes(include=[np.number])
是从对this question的回答中获取的大熊猫?
答案 0 :(得分:5)
julia> df[(<:).(eltypes(df),Union{Number,Missing})]
2×2 DataFrame
│ Row │ x2 │ x3 │
├─────┼─────────┼────┤
│ 1 │ 1 │ 2 │
│ 2 │ missing │ 5 │
请注意,.
是广播运营商,因此我必须以功能形式使用<:
。
答案 1 :(得分:2)
另一种实现方法可能是:
df_numerical = df[[i for i in names(df) if Base.nonmissingtype(eltype(df[i])) <: Number]]
要检索作为Number子类型的所有列,无论它们是否托管丢失的数据都无关紧要。