Did you test with a case where not all strings have 3 genres?
I think you need something like this:
df = DataFrame(genre=["a,b,c", "a,b"])
select(df, :genre =>
ByRow(x -> get.(Ref(split(x, ',')), 1:3, missing)) =>
[:genre1, :genre2, :genre3])