Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
A bug in the code
#1
Dear Python Users,

I am trying to find annual return of S&P500 given monthly prices. I have the following code below. The problem is that I receive empty (Nan) observations. Can you please point at the mistakes that I am making? I attach csv file to this post.

import pandas as pd
import numpy as np
from datetime import datetime

sp_500=pd.DataFrame(pd.read_csv("sp500_historical.csv"))
sp_500['date'] = pd.to_datetime(sp_500['date'])

logret = np.log(sp_500['Close'] / sp_500['Close'].shift(1))
date=[]
d0=sp_500.date
for i in range(0,len(logret)):
    date.append(d0[i].strftime("%Y"))
y=pd.DataFrame(logret,date,columns=['ret_annual'])
ret_annual=np.exp(y.groupby(y.index).sum())-1

ret_annual.head()

Attached Files

.csv   sp500_historical.csv (Size: 20.24 KB / Downloads: 51)
Reply
#2
Does this help?
import pandas as pd
import numpy as np
from datetime import datetime

sp_500 = pd.DataFrame(pd.read_csv("sp500_historical.csv"))
print(f'\nsp_500:\n{sp_500}')
sp_500['date'] = pd.to_datetime(sp_500['date'])
print(f'\nsp_500:\n{sp_500}')

logret = np.log(sp_500['Close'] / sp_500['Close'].shift(1))
print(f'\nlogret:\n{logret}')

date = []
d0 = sp_500.date
print(f'\nd0:\n{d0}')

for i in range(0, len(logret)):
    date.append(d0[i].strftime("%Y"))
print(f'\ndate:\n{date}')

y = pd.DataFrame(logret, date, columns=['ret_annual'])
print(f'\ny:\n{y}')

ret_annual = np.exp(y.groupby(y.index).sum()) - 1
print(f'\nret_annual:\n{ret_annual}')

ret_annual.head()
Output:
sp_500: date Close 0 12/01/1927 251.66 1 01/01/1928 250.37 2 02/01/1928 248.84 3 03/01/1928 277.96 4 04/01/1928 284.74 5 05/01/1928 286.66 6 06/01/1928 275.94 7 07/01/1928 280.12 8 08/01/1928 300.88 9 09/01/1928 301.25 10 10/01/1928 310.74 11 11/01/1928 348.01 12 12/01/1928 351.05 13 01/01/1929 371.09 14 02/01/1929 368.93 15 03/01/1929 370.21 16 04/01/1929 378.39 17 05/01/1929 360.06 18 06/01/1929 395.17 19 07/01/1929 411.54 20 08/01/1929 451.87 21 09/01/1929 429.78 22 10/01/1929 344.14 23 11/01/1929 298.11 24 12/01/1929 307.44 25 01/01/1930 328.56 26 02/01/1930 337.58 27 03/01/1930 352.28 28 04/01/1930 361.07 29 05/01/1930 357.24 ... ... ... 1053 09/01/2015 1989.15 1054 10/01/2015 2156.30 1055 11/01/2015 2161.55 1056 12/01/2015 2129.79 1057 01/01/2016 2019.79 1058 02/01/2016 2009.52 1059 03/01/2016 2131.83 1060 04/01/2016 2127.26 1061 05/01/2016 2151.48 1062 06/01/2016 2147.13 1063 07/01/2016 2227.94 1064 08/01/2016 2223.05 1065 09/01/2016 2213.80 1066 10/01/2016 2168.67 1067 11/01/2016 2244.99 1068 12/01/2016 2285.85 1069 01/01/2017 2313.05 1070 02/01/2017 2392.00 1071 03/01/2017 2388.71 1072 04/01/2017 2403.27 1073 05/01/2017 2428.68 1074 06/01/2017 2437.95 1075 07/01/2017 2487.59 1076 08/01/2017 2481.54 1077 09/01/2017 2516.84 1078 10/01/2017 2572.68 1079 11/01/2017 2644.93 1080 12/01/2017 2673.61 1081 01/01/2018 2823.81 1082 02/01/2018 2709.20 [1083 rows x 2 columns] sp_500: date Close 0 1927-12-01 251.66 1 1928-01-01 250.37 2 1928-02-01 248.84 3 1928-03-01 277.96 4 1928-04-01 284.74 5 1928-05-01 286.66 6 1928-06-01 275.94 7 1928-07-01 280.12 8 1928-08-01 300.88 9 1928-09-01 301.25 10 1928-10-01 310.74 11 1928-11-01 348.01 12 1928-12-01 351.05 13 1929-01-01 371.09 14 1929-02-01 368.93 15 1929-03-01 370.21 16 1929-04-01 378.39 17 1929-05-01 360.06 18 1929-06-01 395.17 19 1929-07-01 411.54 20 1929-08-01 451.87 21 1929-09-01 429.78 22 1929-10-01 344.14 23 1929-11-01 298.11 24 1929-12-01 307.44 25 1930-01-01 328.56 26 1930-02-01 337.58 27 1930-03-01 352.28 28 1930-04-01 361.07 29 1930-05-01 357.24 ... ... ... 1053 2015-09-01 1989.15 1054 2015-10-01 2156.30 1055 2015-11-01 2161.55 1056 2015-12-01 2129.79 1057 2016-01-01 2019.79 1058 2016-02-01 2009.52 1059 2016-03-01 2131.83 1060 2016-04-01 2127.26 1061 2016-05-01 2151.48 1062 2016-06-01 2147.13 1063 2016-07-01 2227.94 1064 2016-08-01 2223.05 1065 2016-09-01 2213.80 1066 2016-10-01 2168.67 1067 2016-11-01 2244.99 1068 2016-12-01 2285.85 1069 2017-01-01 2313.05 1070 2017-02-01 2392.00 1071 2017-03-01 2388.71 1072 2017-04-01 2403.27 1073 2017-05-01 2428.68 1074 2017-06-01 2437.95 1075 2017-07-01 2487.59 1076 2017-08-01 2481.54 1077 2017-09-01 2516.84 1078 2017-10-01 2572.68 1079 2017-11-01 2644.93 1080 2017-12-01 2673.61 1081 2018-01-01 2823.81 1082 2018-02-01 2709.20 [1083 rows x 2 columns] logret: 0 NaN 1 -0.005139 2 -0.006130 3 0.110667 4 0.024099 5 0.006720 6 -0.038113 7 0.015035 8 0.071493 9 0.001229 10 0.031016 11 0.113275 12 0.008697 13 0.055516 14 -0.005838 15 0.003463 16 0.021855 17 -0.049655 18 0.093045 19 0.040590 20 0.093488 21 -0.050121 22 -0.222225 23 -0.143586 24 0.030817 25 0.066440 26 0.027083 27 0.042624 28 0.024646 29 -0.010664 ... 1053 -0.024865 1054 0.080686 1055 0.002432 1056 -0.014802 1057 -0.053030 1058 -0.005098 1059 0.059085 1060 -0.002146 1061 0.011321 1062 -0.002024 1063 0.036945 1064 -0.002197 1065 -0.004170 1066 -0.020596 1067 0.034587 1068 0.018037 1069 0.011829 1070 0.033563 1071 -0.001376 1072 0.006077 1073 0.010518 1074 0.003810 1075 0.020157 1076 -0.002435 1077 0.014125 1078 0.021944 1079 0.027696 1080 0.010785 1081 0.054657 1082 -0.041434 Name: Close, Length: 1083, dtype: float64 d0: 0 1927-12-01 1 1928-01-01 2 1928-02-01 3 1928-03-01 4 1928-04-01 5 1928-05-01 6 1928-06-01 7 1928-07-01 8 1928-08-01 9 1928-09-01 10 1928-10-01 11 1928-11-01 12 1928-12-01 13 1929-01-01 14 1929-02-01 15 1929-03-01 16 1929-04-01 17 1929-05-01 18 1929-06-01 19 1929-07-01 20 1929-08-01 21 1929-09-01 22 1929-10-01 23 1929-11-01 24 1929-12-01 25 1930-01-01 26 1930-02-01 27 1930-03-01 28 1930-04-01 29 1930-05-01 ... 1053 2015-09-01 1054 2015-10-01 1055 2015-11-01 1056 2015-12-01 1057 2016-01-01 1058 2016-02-01 1059 2016-03-01 1060 2016-04-01 1061 2016-05-01 1062 2016-06-01 1063 2016-07-01 1064 2016-08-01 1065 2016-09-01 1066 2016-10-01 1067 2016-11-01 1068 2016-12-01 1069 2017-01-01 1070 2017-02-01 1071 2017-03-01 1072 2017-04-01 1073 2017-05-01 1074 2017-06-01 1075 2017-07-01 1076 2017-08-01 1077 2017-09-01 1078 2017-10-01 1079 2017-11-01 1080 2017-12-01 1081 2018-01-01 1082 2018-02-01 Name: date, Length: 1083, dtype: datetime64[ns] date: ['1927', '1928', '1928', '1928', '1928', '1928', '1928', '1928', '1928', '1928', '1928', '1928', '1928', '1929', '1929', '1929', '1929', '1929', '1929', '1929', '1929', '1929', '1929', '1929', '1929', '1930', '1930', '1930', '1930', '1930', '1930', '1930', '1930', '1930', '1930', '1930', '1930', '1931', '1931', '1931', '1931', '1931', '1931', '1931', '1931', '1931', '1931', '1931', '1931', '1932', '1932', '1932', '1932', '1932', '1932', '1932', '1932', '1932', '1932', '1932', '1932', '1933', '1933', '1933', '1933', '1933', '1933', '1933', '1933', '1933', '1933', '1933', '1933', '1934', '1934', '1934', '1934', '1934', '1934', '1934', '1934', '1934', '1934', '1934', '1934', '1935', '1935', '1935', '1935', '1935', '1935', '1935', '1935', '1935', '1935', '1935', '1935', '1936', '1936', '1936', '1936', '1936', '1936', '1936', '1936', '1936', '1936', '1936', '1936', '1937', '1937', '1937', '1937', '1937', '1937', '1937', '1937', '1937', '1937', '1937', '1937', '1938', '1938', '1938', '1938', '1938', '1938', '1938', '1938', '1938', '1938', '1938', '1938', '1939', '1939', '1939', '1939', '1939', '1939', '1939', '1939', '1939', '1939', '1939', '1939', '1940', '1940', '1940', '1940', '1940', '1940', '1940', '1940', '1940', '1940', '1940', '1940', '1941', '1941', '1941', '1941', '1941', '1941', '1941', '1941', '1941', '1941', '1941', '1941', '1942', '1942', '1942', '1942', '1942', '1942', '1942', '1942', '1942', '1942', '1942', '1942', '1943', '1943', '1943', '1943', '1943', '1943', '1943', '1943', '1943', '1943', '1943', '1943', '1944', '1944', '1944', '1944', '1944', '1944', '1944', '1944', '1944', '1944', '1944', '1944', '1945', '1945', '1945', '1945', '1945', '1945', '1945', '1945', '1945', '1945', '1945', '1945', '1946', '1946', '1946', '1946', '1946', '1946', '1946', '1946', '1946', '1946', '1946', '1946', '1947', '1947', '1947', '1947', '1947', '1947', '1947', '1947', '1947', '1947', '1947', '1947', '1948', '1948', '1948', '1948', '1948', '1948', '1948', '1948', '1948', '1948', '1948', '1948', '1949', '1949', '1949', '1949', '1949', '1949', '1949', '1949', '1949', '1949', '1949', '1949', '1950', '1950', '1950', '1950', '1950', '1950', '1950', '1950', '1950', '1950', '1950', '1950', '1951', '1951', '1951', '1951', '1951', '1951', '1951', '1951', '1951', '1951', '1951', '1951', '1952', '1952', '1952', '1952', '1952', '1952', '1952', '1952', '1952', '1952', '1952', '1952', '1953', '1953', '1953', '1953', '1953', '1953', '1953', '1953', '1953', '1953', '1953', '1953', '1954', '1954', '1954', '1954', '1954', '1954', '1954', '1954', '1954', '1954', '1954', '1954', '1955', '1955', '1955', '1955', '1955', '1955', '1955', '1955', '1955', '1955', '1955', '1955', '1956', '1956', '1956', '1956', '1956', '1956', '1956', '1956', '1956', '1956', '1956', '1956', '1957', '1957', '1957', '1957', '1957', '1957', '1957', '1957', '1957', '1957', '1957', '1957', '1958', '1958', '1958', '1958', '1958', '1958', '1958', '1958', '1958', '1958', '1958', '1958', '1959', '1959', '1959', '1959', '1959', '1959', '1959', '1959', '1959', '1959', '1959', '1959', '1960', '1960', '1960', '1960', '1960', '1960', '1960', '1960', '1960', '1960', '1960', '1960', '1961', '1961', '1961', '1961', '1961', '1961', '1961', '1961', '1961', '1961', '1961', '1961', '1962', '1962', '1962', '1962', '1962', '1962', '1962', '1962', '1962', '1962', '1962', '1962', '1963', '1963', '1963', '1963', '1963', '1963', '1963', '1963', '1963', '1963', '1963', '1963', '1964', '1964', '1964', '1964', '1964', '1964', '1964', '1964', '1964', '1964', '1964', '1964', '1965', '1965', '1965', '1965', '1965', '1965', '1965', '1965', '1965', '1965', '1965', '1965', '1966', '1966', '1966', '1966', '1966', '1966', '1966', '1966', '1966', '1966', '1966', '1966', '1967', '1967', '1967', '1967', '1967', '1967', '1967', '1967', '1967', '1967', '1967', '1967', '1968', '1968', '1968', '1968', '1968', '1968', '1968', '1968', '1968', '1968', '1968', '1968', '1969', '1969', '1969', '1969', '1969', '1969', '1969', '1969', '1969', '1969', '1969', '1969', '1970', '1970', '1970', '1970', '1970', '1970', '1970', '1970', '1970', '1970', '1970', '1970', '1971', '1971', '1971', '1971', '1971', '1971', '1971', '1971', '1971', '1971', '1971', '1971', '1972', '1972', '1972', '1972', '1972', '1972', '1972', '1972', '1972', '1972', '1972', '1972', '1973', '1973', '1973', '1973', '1973', '1973', '1973', '1973', '1973', '1973', '1973', '1973', '1974', '1974', '1974', '1974', '1974', '1974', '1974', '1974', '1974', '1974', '1974', '1974', '1975', '1975', '1975', '1975', '1975', '1975', '1975', '1975', '1975', '1975', '1975', '1975', '1976', '1976', '1976', '1976', '1976', '1976', '1976', '1976', '1976', '1976', '1976', '1976', '1977', '1977', '1977', '1977', '1977', '1977', '1977', '1977', '1977', '1977', '1977', '1977', '1978', '1978', '1978', '1978', '1978', '1978', '1978', '1978', '1978', '1978', '1978', '1978', '1979', '1979', '1979', '1979', '1979', '1979', '1979', '1979', '1979', '1979', '1979', '1979', '1980', '1980', '1980', '1980', '1980', '1980', '1980', '1980', '1980', '1980', '1980', '1980', '1981', '1981', '1981', '1981', '1981', '1981', '1981', '1981', '1981', '1981', '1981', '1981', '1982', '1982', '1982', '1982', '1982', '1982', '1982', '1982', '1982', '1982', '1982', '1982', '1983', '1983', '1983', '1983', '1983', '1983', '1983', '1983', '1983', '1983', '1983', '1983', '1984', '1984', '1984', '1984', '1984', '1984', '1984', '1984', '1984', '1984', '1984', '1984', '1985', '1985', '1985', '1985', '1985', '1985', '1985', '1985', '1985', '1985', '1985', '1985', '1986', '1986', '1986', '1986', '1986', '1986', '1986', '1986', '1986', '1986', '1986', '1986', '1987', '1987', '1987', '1987', '1987', '1987', '1987', '1987', '1987', '1987', '1987', '1987', '1988', '1988', '1988', '1988', '1988', '1988', '1988', '1988', '1988', '1988', '1988', '1988', '1989', '1989', '1989', '1989', '1989', '1989', '1989', '1989', '1989', '1989', '1989', '1989', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991', '1991', '1991', '1991', '1991', '1991', '1991', '1991', '1991', '1992', '1992', '1992', '1992', '1992', '1992', '1992', '1992', '1992', '1992', '1992', '1992', '1993', '1993', '1993', '1993', '1993', '1993', '1993', '1993', '1993', '1993', '1993', '1993', '1994', '1994', '1994', '1994', '1994', '1994', '1994', '1994', '1994', '1994', '1994', '1994', '1995', '1995', '1995', '1995', '1995', '1995', '1995', '1995', '1995', '1995', '1995', '1995', '1996', '1996', '1996', '1996', '1996', '1996', '1996', '1996', '1996', '1996', '1996', '1996', '1997', '1997', '1997', '1997', '1997', '1997', '1997', '1997', '1997', '1997', '1997', '1997', '1998', '1998', '1998', '1998', '1998', '1998', '1998', '1998', '1998', '1998', '1998', '1998', '1999', '1999', '1999', '1999', '1999', '1999', '1999', '1999', '1999', '1999', '1999', '1999', '2000', '2000', '2000', '2000', '2000', '2000', '2000', '2000', '2000', '2000', '2000', '2000', '2001', '2001', '2001', '2001', '2001', '2001', '2001', '2001', '2001', '2001', '2001', '2001', '2002', '2002', '2002', '2002', '2002', '2002', '2002', '2002', '2002', '2002', '2002', '2002', '2003', '2003', '2003', '2003', '2003', '2003', '2003', '2003', '2003', '2003', '2003', '2003', '2004', '2004', '2004', '2004', '2004', '2004', '2004', '2004', '2004', '2004', '2004', '2004', '2005', '2005', '2005', '2005', '2005', '2005', '2005', '2005', '2005', '2005', '2005', '2005', '2006', '2006', '2006', '2006', '2006', '2006', '2006', '2006', '2006', '2006', '2006', '2006', '2007', '2007', '2007', '2007', '2007', '2007', '2007', '2007', '2007', '2007', '2007', '2007', '2008', '2008', '2008', '2008', '2008', '2008', '2008', '2008', '2008', '2008', '2008', '2008', '2009', '2009', '2009', '2009', '2009', '2009', '2009', '2009', '2009', '2009', '2009', '2009', '2010', '2010', '2010', '2010', '2010', '2010', '2010', '2010', '2010', '2010', '2010', '2010', '2011', '2011', '2011', '2011', '2011', '2011', '2011', '2011', '2011', '2011', '2011', '2011', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2013', '2013', '2013', '2013', '2013', '2013', '2013', '2013', '2013', '2013', '2013', '2013', '2014', '2014', '2014', '2014', '2014', '2014', '2014', '2014', '2014', '2014', '2014', '2014', '2015', '2015', '2015', '2015', '2015', '2015', '2015', '2015', '2015', '2015', '2015', '2015', '2016', '2016', '2016', '2016', '2016', '2016', '2016', '2016', '2016', '2016', '2016', '2016', '2017', '2017', '2017', '2017', '2017', '2017', '2017', '2017', '2017', '2017', '2017', '2017', '2018', '2018'] y: ret_annual 1927 NaN 1928 NaN 1928 NaN 1928 NaN 1928 NaN 1928 NaN 1928 NaN 1928 NaN 1928 NaN 1928 NaN 1928 NaN 1928 NaN 1928 NaN 1929 NaN 1929 NaN 1929 NaN 1929 NaN 1929 NaN 1929 NaN 1929 NaN 1929 NaN 1929 NaN 1929 NaN 1929 NaN 1929 NaN 1930 NaN 1930 NaN 1930 NaN 1930 NaN 1930 NaN ... ... 2015 NaN 2015 NaN 2015 NaN 2015 NaN 2016 NaN 2016 NaN 2016 NaN 2016 NaN 2016 NaN 2016 NaN 2016 NaN 2016 NaN 2016 NaN 2016 NaN 2016 NaN 2016 NaN 2017 NaN 2017 NaN 2017 NaN 2017 NaN 2017 NaN 2017 NaN 2017 NaN 2017 NaN 2017 NaN 2017 NaN 2017 NaN 2017 NaN 2018 NaN 2018 NaN [1083 rows x 1 columns] ret_annual: ret_annual 1927 NaN 1928 NaN 1929 NaN 1930 NaN 1931 NaN 1932 NaN 1933 NaN 1934 NaN 1935 NaN 1936 NaN 1937 NaN 1938 NaN 1939 NaN 1940 NaN 1941 NaN 1942 NaN 1943 NaN 1944 NaN 1945 NaN 1946 NaN 1947 NaN 1948 NaN 1949 NaN 1950 NaN 1951 NaN 1952 NaN 1953 NaN 1954 NaN 1955 NaN 1956 NaN ... ... 1989 NaN 1990 NaN 1991 NaN 1992 NaN 1993 NaN 1994 NaN 1995 NaN 1996 NaN 1997 NaN 1998 NaN 1999 NaN 2000 NaN 2001 NaN 2002 NaN 2003 NaN 2004 NaN 2005 NaN 2006 NaN 2007 NaN 2008 NaN 2009 NaN 2010 NaN 2011 NaN 2012 NaN 2013 NaN 2014 NaN 2015 NaN 2016 NaN 2017 NaN 2018 NaN [92 rows x 1 columns]
Reply
#3
Thank you for the reply! That is what I get as well. The problem is that "ret_annual" should provide the annual returns instead of "Nan" and I do not see where I make the mistakes
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020