Ошибка ввода при форматировании вывода pandas.df.pct_change() в процентах

#python #pandas #typeerror #stock

Вопрос:

Я пытаюсь рассчитать ежедневную доходность акций в процентном формате из файла CSV, определив функцию. Вот мой код:

 def daily_ret(ticker):
  return f"{df[ticker].pct_change()*100:.2f}%"
 

Когда я вызываю функцию, я получаю эту ошибку:

 ---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-40-7122588f1289> in <module>()
----> 1 daily_ret('AAPL')

<ipython-input-39-7dd6285eb14d> in daily_ret(ticker)
      1 def daily_ret(ticker):
----> 2   return f"{df[ticker].pct_change()*100:.2f}%"

TypeError: unsupported format string passed to Series.__format__
 

Где я ошибаюсь?

Ответ №1:

f-строки нельзя использовать для форматирования подобных итераций, даже серий:

Используйте map или apply вместо этого:

 def daily_ret(ticker):
    return (df[ticker].pct_change() * 100).map("{:.2f}%".format)
 
 def daily_ret(ticker):
    return (df[ticker].pct_change() * 100).apply("{:.2f}%".format)
 

 import numpy as np
import pandas as pd

df = pd.DataFrame({'A': np.arange(1, 6)})

print(daily_ret('A'))
 
 0       nan%
1    100.00%
2     50.00%
3     33.33%
4     25.00%
Name: A, dtype: object