and note that this data frame will be mutable, only its columns will be immutable.
If you need a fully immutable table just use CSV.File("purchaseData.csv").
There is no way to get immutable columns from CSV.jl when reading with CSV.File/CSV.read. In the single threaded case, normal Vector or SentinelVector are returned, in the multithreaded case ChainedVector of the former vector types are returned.
Let’s see, I think it was back in the 0.7.X releases, immutable columns were returned, but that was several years ago at this point. This material must have been based on that.
If an immutable DataFrame is really needed for some reason, you could convert the data into the Arrow.jl format; it returns immutable columns by default (the data format itself is immutable).