【问题标题】:TypeError: '(slice(0, 15, None), 15)' is an invalid keyTypeError: '(slice(0, 15, None), 15)' 是无效键
【发布时间】:2023-03-30 14:20:01
【问题描述】:

我有一个 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 很陌生,所以调试是我试图更好地理解的一项技能。所以任何关于我可以做些什么来解决这个错误的建议,或者它意味着什么都会有所帮助。谢谢。

【问题讨论】:

  • Cf = C ; Cf[0:15,16] = C[0:15,15] 你正在用数据框C 覆盖数组Cf,所以C[0:15,15] 没有意义

标签: python pandas csv anaconda slice


【解决方案1】:

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

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]

不会出错。

【讨论】:

    猜你喜欢
    • 2019-09-11
    • 1970-01-01
    • 2020-11-19
    • 2020-03-19
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 2021-12-09
    • 2023-02-15
    相关资源
    最近更新 更多