我想选择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的答案?
julia> df[(<:).(eltypes(df),Union{Number,Missing})]
2×2 DataFrame
│ Row │ x2 │ x3 │
├─────┼─────────┼────┤
│ 1 │ 1 │ 2 │
│ 2 │ missing │ 5 │
请注意,.
是广播运营商,因此我必须以功能形式使用<:
运算符。
另一种方法可能是:
df_numerical = df[[i for i in names(df) if Base.nonmissingtype(eltype(df[i])) <: Number]]
要检索作为Number子类型的所有列,如果它们托管缺失数据则无关紧要。