获取TypeError:在Pandas Dataframe中设置索引时,“list”对象不可调用

ecfdbz9o  于 2023-04-10  发布在  其他
关注(0)|答案(4)|浏览(120)

我有一个简单的Pandas Dataframe:

data.head(5)

> Date  Time    Open    High    Low Close   Vol OI
> 0 02/02/1993  16:00   44.23   44.38   44.13   44.34   201300  0
> 1 02/03/1993  16:00   44.41   44.84   44.38   44.82   529400  0
> 2 02/04/1993  16:00   44.97   45.10   44.88   45.00   531500  0
> 3 02/05/1993  16:00   44.97   45.06   44.73   44.97   492100  0
> 4 02/08/1993  16:00   44.97   45.13   44.92   44.98   596100  0

我想将列“日期”设置为索引:

data.set_index('Date')

但是得到错误“TypeError:'list'对象不可调用”

TypeError                                 Traceback (most recent call last)
<ipython-input-59-a610da45b82c> in <module>()
----> 1 data.set_index('Date')

TypeError: 'list' object is not callable

当前数据中的索引为RangeIndex:

data.index
RangeIndex(start=0, stop=5873, step=1)

为什么我不能使用日期列设置索引?
谢谢大家。

s1ag04yj

s1ag04yj1#

我遇到了同样的问题,我尝试了其他答案的解决方案,但它们对我不起作用。(重新索引,设置in-place=true,或分配给另一个变量)
我使用的是jupyter-lab,对我来说,真正有效的方法是从内核重启所有变量。也许如果你也使用notebook,这也会为你解决这个问题。
如果我不得不猜测,我的索引在我的尝试中不知何故被破坏了,这就是为什么重置内核修复了它,对你来说可能是一样的。
把它放在这里供将来参考,希望对你有帮助。

dgtucam1

dgtucam12#

我得到了同样的问题“TypeError:在使用set_index命令时,“list”对象不可调用。我通过首先调用“reindex()”方法然后使用set_index得到了解决方案。希望它对你有用。Aamir

xdnvmnnf

xdnvmnnf3#

我认为你必须将参数inplace=True添加到set_index

data.set_index('Date', inplace=True)

另一个解决方案是:

data = data.set_index('Date')

样品:

import pandas as pd

data = pd.DataFrame({'High': {0: 44.380000000000003, 1: 44.840000000000003, 2: 45.100000000000001, 3: 45.060000000000002, 4: 45.130000000000003}, 'Vol': {0: 201300, 1: 529400, 2: 531500, 3: 492100, 4: 596100}, 'Close': {0: 44.340000000000003, 1: 44.82, 2: 45.0, 3: 44.969999999999999, 4: 44.979999999999997}, 'Date': {0: '02/02/1993', 1: '02/03/1993', 2: '02/04/1993', 3: '02/05/1993', 4: '02/08/1993'}, 'Open': {0: 44.229999999999997, 1: 44.409999999999997, 2: 44.969999999999999, 3: 44.969999999999999, 4: 44.969999999999999}, 'Time': {0: '16:00', 1: '16:00', 2: '16:00', 3: '16:00', 4: '16:00'}, 'Low': {0: 44.130000000000003, 1: 44.380000000000003, 2: 44.880000000000003, 3: 44.729999999999997, 4: 44.920000000000002}, 'OI': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0}})
print (data)

#   Close        Date   High    Low  OI   Open   Time     Vol
#0  44.34  02/02/1993  44.38  44.13   0  44.23  16:00  201300
#1  44.82  02/03/1993  44.84  44.38   0  44.41  16:00  529400
#2  45.00  02/04/1993  45.10  44.88   0  44.97  16:00  531500
#3  44.97  02/05/1993  45.06  44.73   0  44.97  16:00  492100
#4  44.98  02/08/1993  45.13  44.92   0  44.97  16:00  596100

print (data.columns)
#Index(['Close', 'Date', 'High', 'Low', 'OI', 'Open', 'Time', 'Vol'], dtype='object')

data.set_index('Date', inplace=True)
print (data)

#            Close   High    Low  OI   Open   Time     Vol
#Date                                                     
#02/02/1993  44.34  44.38  44.13   0  44.23  16:00  201300
#02/03/1993  44.82  44.84  44.38   0  44.41  16:00  529400
#02/04/1993  45.00  45.10  44.88   0  44.97  16:00  531500
#02/05/1993  44.97  45.06  44.73   0  44.97  16:00  492100
#02/08/1993  44.98  45.13  44.92   0  44.97  16:00  596100

如果需要在read_csv中设置索引并转换为日期时间(如果分隔符是,,则可以省略它,因为默认情况下是sep=','):

import pandas as pd
import io

temp=u"""Date;Time;Open;High;Low;Close;Vol;OI
02/02/1993;16:00;44.23;44.38;44.13;44.34;201300;0
02/03/1993;16:00;44.41;44.84;44.38;44.82;529400;0
02/04/1993;16:00;44.97;45.10;44.88;45.00;531500;0
02/05/1993;16:00;44.97;45.06;44.73;44.97;492100;0
02/08/1993;16:00;44.97;45.13;44.92;44.98;596100;0"""
#after testing replace io.StringIO(temp) to filename
data = pd.read_csv(io.StringIO(temp), sep=";", index_col='Date', parse_dates=['Date'])
print (data)

             Time   Open   High    Low  Close     Vol  OI
Date                                                     
1993-02-02  16:00  44.23  44.38  44.13  44.34  201300   0
1993-02-03  16:00  44.41  44.84  44.38  44.82  529400   0
1993-02-04  16:00  44.97  45.10  44.88  45.00  531500   0
1993-02-05  16:00  44.97  45.06  44.73  44.97  492100   0
1993-02-08  16:00  44.97  45.13  44.92  44.98  596100   0
2ekbmq32

2ekbmq324#

检查你是否在代码中使用了.to_list()方法,我使用了相同的方法,并且一次又一次地出错。所以请确保在它之前使用set_index方法。

相关问题