You've got three problems. One is that you're passing the wrong structure to FinancialDerivative. You've got contract parameters and ambient parameters bundled into a single list. Each parameter set should be it's own list, like this:
FinancialDerivative[{"European", "Put"}, {"StrikePrice" -> #,
"Expiration" -> #2}, {"InterestRate" -> 0.0175, "Volatility" -> .3,
"CurrentPrice" -> 3000, "Dividend" -> 0.02}, {"Delta"}]
The second problem is that you're applying ListPlot3D to data with the wrong dimensions. After mapping your FinancialDerivative function over the table and flattening, the result is just 1D data.
The third is your iteration range for expiriation has the same start and end. This is legal for the table, but it'll generate a degenerate surface that ListPlot3D won't render as you expect.
I'm assuming you want the result of FinancialDerivative plotted against strikeprice and expiration. Here's one way to do it:
ListPlot3D[
Flatten[Table[{strikeprice, expiration,
FinancialDerivative[{"European",
"Put"}, {"StrikePrice" -> strikeprice,
"Expiration" -> expiration}, {"InterestRate" -> 0.0175,
"Volatility" -> .3, "CurrentPrice" -> 3000,
"Dividend" -> 0.02}, {"Delta"}]}, {strikeprice, 1500, 3000,
250}, {expiration, .03, .3, .135}], 1]]
I don't know what your iteration range should be for expiration, so I just made something up. Also, I thought it was simpler to just construct the data explicitly with the Table rather than do a MapApply.