TypeError:“Int64Index”对象不可调用

Posted

技术标签:

【中文标题】TypeError:“Int64Index”对象不可调用【英文标题】:TypeError: 'Int64Index' object is not callable 【发布时间】:2021-04-15 17:04:24 【问题描述】:

为什么会出现这个错误?

ticker = 'NFLX'
price = get_data(ticker, start_date='2020-01-01', end_date=None, index_as_date=bool, interval ='1d')
price.to_csv(r'D:\Python Stuff\pythonProject\NFLX.csv')
df = pd.read_csv('NFLX.csv')
price_list = df['adjclose']
change = price_list.diff(1)


def RSI():
    change.dropna(inplace=True)
    positive = change.copy()
    negative = change.copy()
    positive[positive < 0] = 0
    negative[negative > 0] = 0

    RSI_days = 5

    average_gain = positive.rolling(window=RSI_days).mean()
    average_loss = abs(negative.rolling(window=RSI_days).mean())
    relative_strength = average_gain/average_loss
    rsi = 100.0-(100.0/(1.0+relative_strength))
    return rsi

relative_strength_index = RSI()

print(relative_strength_index[-6:])

lowest_rsi = min(relative_strength_index[-6:])
print(lowest_rsi)

index_number = relative_strength_index[-6:].index(lowest_rsi)
print('index of lowest rsi = ' + index_number)

当我运行代码时,我的错误是“TypeError: 'Int64Index' object is not callable”。如何改进此代码以解决此错误?

【问题讨论】:

请指出哪一行导致引发异常 【参考方案1】:

index(lowest_rsi)中的括号替换为方括号

index_number = relative_strength_index[-6:].index[lowest_rsi.astype(int)]
print('index of lowest rsi = ' + index_number)

编辑:您的代码应该如下所示:

relative_strength_index = RSI()

print(relative_strength_index[-6:])

index_number = relative_strength_index[-6:].idxmin()
print('index of lowest rsi =', index_number)

【讨论】:

这是我得到的:IndexError: 只有整数、切片 (:)、省略号 (...)、numpy.newaxis (None) 和整数或布尔数组是有效的索引 那是因为lowest_rsi如果你想用它作为索引应该是一个整数。试试lowest_rsi.astype(int)。我已经相应地编辑了我的答案 现在它说:AttributeError: 'int' object has no attribute 'astype' 除了您在此处显示的内容之外,您是否更改了代码中的其他内容?喜欢在该行之前使用int(lowest_rsi) 我没有这样做【参考方案2】:

relative_strength_index 不是列表,而是 pandas.Series 类型。 因此,index 是一个属性,而不是像 list 那样的方法,这是您最初错误的来源,您不能调用该属性。

您应该改为将relative_strength_index 转换为列表,然后您可以继续调用 index 方法,如下所示。

此外,您应该在连接之前将index_number 转换为字符串。

index_number = list(relative_strength_index[ -6: ]).index(lowest_rsi)
print('index of lowest rsi = ' + str(index_number))

【讨论】:

以上是关于TypeError:“Int64Index”对象不可调用的主要内容,如果未能解决你的问题,请参考以下文章

关键错误:[Int64Index...] dtype='int64] 均不在列中

Pandas 数据帧按索引切片

接收 KeyError:“[Int64Index([ ... dtype='int64', length=1323)] 均不在 [columns] 中”

KeyError:“[Int64Index dtype='int64', length=9313)] 都不在 [columns] 中”

KeyError: “None of [Int64Index([...], dtype=‘int64‘, length=739)] are in the [columns]“

仅对 DatetimeIndex、TimedeltaIndex 或 PeriodIndex 有效,但获得了“Int64Index”实例