You should remove sigmoid activation from the last dense layer and define it with just the number of units, which is 1.
Loss could be “mse” or “mae”. Any crossentropy loss is suited only for classification tasks, and here you have regression.
The same applied to metrics: “accuracy” refers to classification accuracy. When dealing with regression you can skip defining metrics in compile() and then the training will display only the loss. Or you can define loss=“mse” and metrics=[“mae”] - then both of them will be displayed.
Also, usually you have to normalize the input data but not the target values. You can extract a target column from a pandas DataFrame with y = df.pop(“column_name”) method instead of iterating through all the rows and collecting values in a list one by one.