Хотя я ценю ответ Богумила Камински (также потому, что теперь я понял причины неудачи), его предлагаемое решение дает сбой, если в нем есть пропущенные элементы в нечисловых столбцах, например ::
df = DataFrame(
cat = ["green","blue",missing],
v1 = [1.0,missing,2.0],
v2 = [1,2,missing]
)
Вместо этого я могу использовать (один или только один, в зависимости от моих потребностей):
[df[ismissing.(df[i]), i] = 0 for i in names(df) if typeintersect(Number, eltype(df[i])) != Union{}]
[df[ismissing.(df[i]), i] = "" for i in names(df) if typeintersect(String, eltype(df[i])) != Union{}]
Преимущество заключается в том, что я могу выбрать нужный мне тип значения в качестве "отсутствующей замены" для столбца другого типа (например, 0 для числа или "" для строки).
EDIT:
Возможно, более читабельно, спасибо еще раз Ответ Бегумила :
[df[ismissing.(df[i]), i] = 0 for i in names(df) if Base.nonmissingtype(eltype(df[i])) <: Number]
[df[ismissing.(df[i]), i] = "" for i in names(df) if Base.nonmissingtype(eltype(df[i])) <: String]