from nsepy import get_history from datetime import date import datetime import pandas as pd import numpy as np file = r'C:\Users\Raspberry-Pi\Desktop\Desktop\List.xlsx' list = pd.read_excel(file) list = list['SYMBOL'] start = date.today()-datetime.timedelta(days = 10) end = date.today() symb = get_history(symbol='INFY',start = start,end = end) h = symb.tail(3).High.tolist() l = symb.tail(3).Low.tolist() print(type(h)) print(type(l)) x = map(lambda a,b:a-b,h,l) print(type(x)) x = list(x) I am getting error:
series object not callable
and its pointing to x = list(x) line.
3 Answers
list(x) normally means turn x into a list object. It's a function that creates a list object. But near the top you redefined list:
list = pd.read_excel(file) Now list is now a pandas series object (as the error message says), and it does not function as a function, i.e. it is not callable, it cannot be used with ().
Use a different name for this object. Use a silly name like foo if you can't think of a better descriptor.
But I think you can omit map and use simple subtract and then convert to list:
symb = get_history(symbol='INFY',start = start,end = end) print ((symb.tail(3).High - symb.tail(3).Low).tolist()) Also don't use variable list (reserved word in python) rather L (or something else):
L = pd.read_excel(file) L = L['SYMBOL'] Sample:
import pandas as pd symb = pd.DataFrame({'High':[8,9,7,5,3,4],'Low':[1,2,3,1,0,1]}) print (symb) High Low 0 8 1 1 9 2 2 7 3 3 5 1 4 3 0 5 4 1 print ((symb.tail(3).High - symb.tail(3).Low).tolist()) [4, 3, 3] EDIT:
I try simulate problem:
list = pd.DataFrame({'SYMBOL':['sss old','dd','old']}) print (list) SYMBOL 0 sss old 1 dd 2 old list = list['SYMBOL'] print (list) 0 sss old 1 dd 2 old Name: SYMBOL, dtype: object print (type(list)) <class 'pandas.core.series.Series'> x = [1,2,3] #list is Series, not function x = list(x) print (x) TypeError: 'Series' object is not callable If change list to L, is important reopen python console, because still same error.
So this works perfectly:
df = pd.DataFrame({'SYMBOL':['sss old','dd','old']}) print (df) SYMBOL 0 sss old 1 dd 2 old L = df['SYMBOL'] print (L) 0 sss old 1 dd 2 old Name: SYMBOL, dtype: object x = [1,2,3] x = list(x) print (x) [1, 2, 3] The problem is that you have reassigned reserve word
list = pd.read_excel(file) list = list['SYMBOL'] hence list here is just a list of ['S', 'Y', 'M', 'B'..]. Use another name for this definition the program will work fine