Как и другие говорили, проблема в df= pd.DataFrame, columns=['a'])
Вам необходимо предоставить данные для преобразования в фрейм данных. Ниже приведен пример, который будет работать, передавая список в фрейм данных. Обратите внимание, что результат печатается как «numpy.float64» при запуске.
import pandas as pd
salary = {'a':[20, 21, 19, 18]}
df= pd.DataFrame(data)
df.a = df.a.astype(float)
print(type(df.a[0]))