web-dev-qa-db-fra.com

Erreur map to list: objet série non susceptible d'appel

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).

4
John Ruby

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]
3
jezrael

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.

3
hpaulj

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

0
saikumarm