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)
Je reçois une erreur:
objet série non appelable
et son pointant vers la ligne x = list(x)
.
Mais je pense que vous pouvez omettre map
et utiliser une soustraction simple, puis convertir en list
:
symb = get_history(symbol='INFY',start = start,end = end)
print ((symb.tail(3).High - symb.tail(3).Low).tolist())
De même, n'utilisez pas la variable list
(mot réservé en python) mais plutôt L
(ou autre chose):
L = pd.read_Excel(file)
L = L['SYMBOL']
Échantillon:
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]
MODIFIER:
J'essaie de simuler le problème:
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
Si vous changez list
en L
, il est important de rouvrir la console python, car la même erreur se produit.
Donc cela fonctionne parfaitement:
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]
list(x)
signifie normalement transformer x
en un objet list
. C'est une fonction qui crée un objet de liste. Mais près du sommet, vous avez redéfini list
:
list = pd.read_Excel(file)
Maintenant, list
est maintenant un objet pandas series
(comme le message d'erreur le dit), et il ne fonctionne pas comme une fonction, c'est-à-dire qu'il ne s'agit pas de callable
, il ne peut pas être utilisé avec ()
.
Utilisez un nom différent pour cet objet. Utilisez un nom idiot comme foo
si vous ne pouvez pas imaginer un meilleur descripteur.
Le problème est que vous avez réaffecté Word de réserve
list = pd.read_Excel(file)
list = list['SYMBOL']
par conséquent, liste est juste une liste de ['S', 'Y', 'M', 'B'..]
. Utilisez un autre nom pour cette définition, le programme fonctionnera correctement