映射到列表错误:系列对象不可调用
Posted
技术标签:
【中文标题】映射到列表错误:系列对象不可调用【英文标题】:Map to List error: Series object not callable 【发布时间】:2017-01-01 10:14:48 【问题描述】: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)
线。
【问题讨论】:
你能把整个错误放在描述中吗 【参考方案1】:但我认为您可以省略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】:list(x)
通常意味着将x
转换为list
对象。这是一个创建列表对象的函数。但是在顶部附近你重新定义了list
:
list = pd.read_excel(file)
现在list
现在是pandas series
对象(如错误消息所述),它不能作为函数使用,即它不是callable
,它不能与()
一起使用。
为此对象使用不同的名称。如果您想不出更好的描述符,请使用像 foo
这样愚蠢的名称。
【讨论】:
【参考方案3】:问题是你重新分配了保留字
list = pd.read_excel(file)
list = list['SYMBOL']
因此这里的列表只是['S', 'Y', 'M', 'B'..]
的列表。为这个定义使用另一个名字,程序会正常工作
【讨论】:
我对其进行了测试,对我来说它有效。你用python 2还是python 3? 我用python 2,我不是一个热心的程序员 你用熊猫吗?你能测试一下吗? 我不使用熊猫 因为在 pandas 中list['SYMBOL']
表示在 DataFrame
中选择名称为 SYMBOL
的列称为 list
。以上是关于映射到列表错误:系列对象不可调用的主要内容,如果未能解决你的问题,请参考以下文章