use the passmissing
wrapper:
julia> transform(df, :Y => ByRow(passmissing(lowercase)) => :Y)
6×2 DataFrame
Row │ Y Z
│ String String?
─────┼─────────────────
1 │ a A
2 │ b missing
3 │ c C
4 │ d missing
5 │ e E
6 │ f missing