TypeError: '(slice(0, 15, None), 15)' is an invalid key

TypeError: '(slice(0, 15, None), 15)' is an invalid key

我在 Python 中有一段代码,看起来类似于下面粘贴的代码。对于上下文,所有 csv 文件都打印 [15 行 x 16 列],出于隐私目的我只是更改了名称。

import numpy as np
import pandas as pd 

C = pd.read_csv('/Users/name/Desktop/filename1.csv')
Chome = pd.read_csv('/Users/name/Desktop/filename2.csv')
Cwork = pd.read_csv('/Users/name/Desktop/filename3.csv')
Cschool = pd.read_csv('/Users/name/Desktop/filename4.csv')
Cother = pd.read_csv('/Users/name/Desktop/filename5.csv')

Cf = np.zeros([17,17])
Cf = C
Cf[0:15,16] = C[0:15,15]
Cf[16,0:15] = C[15,0:15] 
Cf[16,16] = C[15,15]

print(Cf)

当我 运行 代码时,出现以下错误:

runfile('/Users/name/.spyder-py3/untitled12.py', wdir='/Users/name/.spyder-py3')
Traceback (most recent call last):

  File "/Users/name/.spyder-py3/untitled12.py", line 23, in <module>
    Cf[0:15,16] = C[0:15,15]

  File "/opt/anaconda3/lib/python3.8/site-packages/pandas/core/frame.py", line 2800, in __getitem__
    indexer = self.columns.get_loc(key)

  File "/opt/anaconda3/lib/python3.8/site-packages/pandas/core/indexes/base.py", line 2646, in get_loc
    return self._engine.get_loc(key)

  File "pandas/_libs/index.pyx", line 111, in pandas._libs.index.IndexEngine.get_loc

  File "pandas/_libs/index.pyx", line 116, in pandas._libs.index.IndexEngine.get_loc

TypeError: '(slice(0, 15, None), 15)' is an invalid key

我不太清楚这个错误是什么意思。我是 python 的新手,所以调试是我试图更好地理解的一项技能。所以任何关于我可以做什么来修复这个错误的建议,或者它意味着什么都会有所帮助。谢谢。

请注意代码示例中的以下顺序:

C = pd.read_csv(...)
... # Other cases of pd.read_csv
Cf = np.zeros([17,17])

所以,至少到现在为止,C 是一个 DataFrameCf 是一个Numpy 数组。

那么Cf = C可能是一个逻辑错误,因为它覆盖了 Numpy 数组(全为零)以及对 C.

的另一个引用

现在关于违规指令 (Cf[0:15,16] = C[0:15,15]):

注意C[0:15,15]是错误的(运行这段代码你自己看吧)。 在 pandasonic DataFrames 的情况下,您可以使用“位置寻址”, 包括切片,使用 iloc.

另一方面,允许 Numpy 数组使用此表示法。

因此,假设不需要 Cf = C 并且 Cf 应该保留 Numpy 数组,您可能应该将此指令更正为:

Cf[0:15,16] = C.iloc[0:15,15]

并对代码中的其余指令进行类似的更正。

编辑

另一种选择是在C DataFrame中引用底层的Numpy数组, 使用 values 属性。 在这种情况下,您可以使用 Numpythonic 寻址方式,例如:

C.values[0:15,15]

没有错误。