No, you would not need a separate sprite for each weapon. You can only have 2 sprites - WeaponShop and WeaponEquipped. Each sprite will have many animations - for example WeaponShop will have "SS1", "SS2", "LS1" etc (see my screenshot above).
Also, create an instance variable "weapon_code" on these sprites. You can create other instance variables, for example "weapon_price".
So when you add weapons to your shop, you can pick several weapon codes from the CSV. (on random, or all available for this level or using some other criteria).
For each weapon code you create an instance of your sprite and assign WeaponShop.weapon_code=(code from CSV), WeaponShop.weapon_price=(price from CSV). And set animation, also retrieved from CSV.
Now you have a bunch of WeaponShop sprite instances which you can display in the shop.
When player clicks (or overlaps) any of them, you can easily get weapon code and price from sprite instance variables. And if needed, you can retrieve other data from the CSV.
You can do all this with only a dozen or so events and sell hundreds of weapons in your shops