我有一个Python代码,看起来像下面粘贴的代码。对于上下文,所有csv文件都打印[15行x16列],我只是出于隐私目的更改了名称。
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是DataFrame,Cf为Numpy数组。
那么Cf = C
可能是一个逻辑错误,因为它覆盖了Numpy数组(满零(,另一个引用C。
现在,就违规指令(Cf[0:15,16] = C[0:15,15]
(而言:
请注意,C[0:15,15]
是错误的(请自行运行此代码以查看它(。在泛数据帧的情况下,您可以使用";位置寻址";,包括切片,使用iloc。
另一方面,对于Numpy数组,这种表示法是允许的。
因此,假设不需要Cf = C
,并且Cf应保持为Numpy数组,您可能应该将此指令更正为:
Cf[0:15,16] = C.iloc[0:15,15]
并在代码中的其余指令中进行类似的更正。
编辑
另一个选项是引用CDataFrame中的底层Numpy数组,使用值属性。在这种情况下,您可以使用Numpythonic寻址样式,例如:
C.values[0:15,15]
不会导致错误。