提问人:OMeihls 提问时间:10/13/2023 更新时间:10/13/2023 访问量:63
使用 Python 获取 KeyError: 9,复制数据帧
Getting KeyError: 9 with Python, Copy of a Dataframe
问:
我正在尝试在 google colab 中循环浏览 DataFrame,到目前为止它一直在工作,但我遇到了一个问题。我创建了一个数据帧的副本,删除了相关列中包含 NaN 的行,并且循环不再起作用。我收到 KeyError: 9。
def findJobsCertAnn(thresholdYear):
jobCount = 0
for i in range(jobsDFCopy.shape[0]):
if (thresholdYear - 1) < jobsDFCopy['Years Since Approval'][i] <= thresholdYear:
jobCount += jobsDFCopy['Certified Jobs'][i]
return jobCount
这应该返回列中的作业数,但只返回在特定边界之间具有“自批准以来的年数”值的列。对于“门槛年”,我使用数字 1 到 9,尽管我觉得这无关紧要。
奇怪的是,它在原始 DataFrame 中正常工作,而不是在副本中正常工作。 这是它的工作原理:
def findCompCertAnn(threshold):
rowNum = 0
for i in range(df.shape[0]):
if (threshold - 1) < df['Years Since Approval'][i] <= threshold:
rowNum += 1
return rowNum
此处的预期结果是返回“自批准以来的年数”列中值在所述范围内的行数,与之前相同。我在这里没有遇到关键错误。
我不确定问题是什么,但我猜它出在我复制 DataFrame 的方式上。 以下是我复制 DataFrame 的方式:
jobsDFCopy = df.copy()
jobsDFCopy.dropna(subset=['Certified Jobs'], inplace=True)
它将删除“认证作业”列中包含“NaN”的行。
我尝试过访问和比较(使用 if 语句)并遍历 JobsDFCopy 中的值,只是为了看看它是否有效,它确实有效,但当我尝试在此函数中执行此操作时,它没有。
任何帮助都非常感谢。
以下是 Colab 的完整错误:
KeyError Traceback (most recent call last)
/usr/local/lib/python3.10/dist-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
3801 try:
-> 3802 return self._engine.get_loc(casted_key)
3803 except KeyError as err:
6 frames
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()
KeyError: 9
The above exception was the direct cause of the following exception:
KeyError Traceback (most recent call last)
/usr/local/lib/python3.10/dist-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
3802 return self._engine.get_loc(casted_key)
3803 except KeyError as err:
-> 3804 raise KeyError(key) from err
3805 except TypeError:
3806 # If we have a listlike key, _check_indexing_error will raise
KeyError: 9
答: 暂无答案
评论
dropna
iloc
jobsDFCopy
reset_index()
dropna()
inplace=True
df
.iloc
for index, row in jobsDFCopy.iterrows():
for i in range(jobsDFCopy.shape[0]):
row['Years Since Approval']
jobsDFCopy['Years Since Approval'][i]