映射到列表错误:系列对象不可调用

时间:2016-08-25 05:43:46

标签: python list pandas dictionary nsepy

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)

我收到错误:

  

系列对象无法调用

并指向x = list(x)行。

3 个答案:

答案 0 :(得分:4)

list(x)通常意味着将x转换为list个对象。它是一个创建列表对象的函数。但是在顶部附近你重新定义了list

list = pd.read_excel(file)

现在list现在是一个pandas series对象(如错误信息所示),并且它不作为函数运行,即它不是callable,它不能被使用与()

为此对象使用其他名称。如果您无法想到更好的描述符,请使用像foo这样的愚蠢名称。

答案 1 :(得分:3)

但我认为您可以省略map并使用简单减法然后转换为list

symb = get_history(symbol='INFY',start = start,end = end)
print ((symb.tail(3).High - symb.tail(3).Low).tolist())

也不要使用变量list(python中的保留字)而不是L(或其他):

L = pd.read_excel(file)
L = L['SYMBOL']

样品:

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]

编辑:

我尝试模拟问题:

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

如果将list更改为L,重要的是重新打开python控制台,因为仍然是同样的错误。

所以这很有效:

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]

答案 2 :(得分:0)

问题是你已经重新分配了保留字

list = pd.read_excel(file) 
list = list['SYMBOL']

因此这里的列表只是['S', 'Y', 'M', 'B'..]的列表。使用另一个名称来定义该程序将正常工作