DataFrame.set_index返回' str'对象不可调用

时间:2017-06-16 15:45:18

标签: python pandas

我没有在这里寻找解决方案,因为我找到了解决方法;大多数情况下,我只是想了解为什么我的原始方法没有工作,因为周围的工作确实如此。

我的数据帧为2803行,默认数字键。我想用第0列中的值替换它,即TKR。

所以我使用f.set_index('TKR')并获取

f.set_index(' TKR&#39)

Traceback (most recent call last):

  File "<ipython-input-4-39232ca70c3d>", line 1, in <module>
    f.set_index('TKR')

TypeError: 'str' object is not callable

所以我想也许在我的TKR专栏中有一些噪音,而不是滚动2803行我尝试f.head().set_index('TKR')

当有效时,我尝试f.head(100).set_index('TKR')也可以。我继续使用500,1000和1500的参数,所有参数都有效。 2800,2801,2802和2803也是如此。最后我决定

f.head(len(f)).set_index('TKR')

工作并将在下个月处理不同大小的数据框。我只想理解为什么这种方法有效,原始的,更简单的,并且(我认为)通过书籍方法不会。

我在Windows 10计算机上使用Python 3.6(64位)和Pandas 0.18.1

4 个答案:

答案 0 :(得分:2)

您可能不小心将pd.DataFrame.set_index()分配了一个值。

此错误的示例:f.set_index = 'intended_col_name'

作为其余代码的结果,.set_index更改为不可调用的str,从而导致此错误。

尝试重新启动笔记本电脑,删除错误的代码,然后将其替换为f.set_index('TKR')

答案 1 :(得分:1)

我知道已经有很长时间了,但是我认为将来有些人可能需要答案。

只要'TKR'是DataFrame f的列,您对f.set_index('TKR')所做的操作就完全正确。

也就是说,这是您不应该拥有的错误。总是因为您在先前的步骤中重新定义了一些内置函数方法或python函数(可能是“ set_index”)。因此,解决方法是检查您的代码以找出哪一部分是错误的。

如果您使用的是Jupiter笔记本,请重新启动它并运行此功能块只能解决此问题。

答案 2 :(得分:0)

我相信我有一个解决方案。

我遇到了同样的问题,我正在从字典构建数据框,如下所示:

df_beta = df['Beta']
df_returns = df['Returns']

然后,尝试执行 df_beta.set_index(Date) 会失败。我的解决方法是

df_beta = df['Beta'].copy()
df_returns = df['Returns'].copy()

显然,如果您将数据帧构建为另一个现有数据帧的“视图”,则无法设置索引,并且会引发“系列不可调用”错误。相反,如果您创建一个显式的新对象来复制原始数据帧,那么您可以调用 reset_index,这就是您在计算头部时所做的。

希望这会有所帮助,2 年后 :)

答案 3 :(得分:0)

我这里也有同样的问题。

import tushare as ts
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

ts.set_token('*************************************')

tspro = ts.pro_api()

gjyx = tspro.daily(ts_code='000516.SZ', start_date='20190101')

# this doesn't work
# out:'str' object is not callable
gjyx = gjyx.set_index('trade_date')


# this works
gjyx = gjyx.head(len(gjyx)).set_index('trade_date')

jupyter notebook 6.1.6、python 3.9.1、miniconda3、win10

但是当我将此 ipynb 上传到 AWS 上的 ubuntu 时,它可以工作。