Сначала замените все строковые значения на None, чтобы пометить их как отсутствующие значения, а затем преобразовать их в float.
None
df['foo'][df['foo'] == '-'] = None df['foo'] = df['foo'].astype(float)