The code below outputs vectors of unit ranges as requested:
using DataFrames
function max_valid_ranges(v)
ix = findall(in((NaN, missing)), v)
(1 ∉ ix) && pushfirst!(ix, 0)
n = length(v)
(n ∉ ix) && append!(ix, n + 1)
d = diff(ix)
iy = findall(==(maximum(d)), d)
return [(ix[i]+1):(ix[i]+d[i]-1) for i in iy]
end
df = DataFrame(col1 = [1, NaN, 3, 4, NaN, 6, 7, 8, 9, 10, NaN, NaN], col2 = [missing, 2, 3, 4, 5, 6, missing, 8, 9, 10, 11, 12])
max_valid_ranges(df.col1) # [6:10]
max_valid_ranges(df.col2) # [2:6; 8:12]