НЕ проходите по циклу данных, как предложил Калехманн, это очень неэффективно.Вы можете либо вызвать data = df["close"].pct_change()
, как предложил Sven, либо, если вы хотите использовать функцию, аналогичную той, которую вы определили:
data = df['first']/df['first'].shift(1)-1
И тогда вы можете запустить:
data_list = ['{:.6%}'.format(x) for x in data.tolist()]