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

dbo*_*ger 6 python pandas

找到解决方法后,我不在这里寻找解决方案;大多数情况下,我只是想了解为什么原来的方法不起作用,而周围的方法却起作用了。

我有一个带有默认数字键的2803行的数据框。我想将其替换为列0中的值,即TKR。

所以我使用f.set_index('TKR')并得到

f.set_index('TKR')

Traceback (most recent call last):

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

TypeError: 'str' object is not callable
Run Code Online (Sandbox Code Playgroud)

因此,我认为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')

该方法有效,并将在下个月处理其他大小的数据框。我只想了解为什么这样做有效,而按book方法进行的原始,简单和(我认为)无效。

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

小智 5

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

这个错误的例子: f.set_index = 'intended_col_name'

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

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


iPr*_*nce 1

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

f.set_index('TKR')只要“TKR”是 DataFrame f 的一列,您所做的就是完全正确的。

也就是说,这是一个你不应该有的错误。总是因为你在前面的步骤中重新定义了一些内置的函数方法或Python的函数(可能是'set_index')。因此,修复的方法是检查您的代码以找出哪一部分是错误的。

如果您使用的是 Jupiter 笔记本,重新启动并运行此块即可解决此问题。