pandas 访问panda Dataframe 时出现键错误

qnyhuwrf  于 2023-02-02  发布在  其他
关注(0)|答案(2)|浏览(143)

当我试图以test_df["LABEL"][0]的方式访问panda Dataframe 中的单个元素时,我得到了一个错误。下面是我如何加载数据的代码片段:

print "reading test set"
test_set = pd.read_csv(data_path+"small_test_products.txt", header=0, delimiter="|")

print "shape of the test set", test_set.shape 
test_df = pd.DataFrame(test_set)
lengthOfTestSet = len(test_df["LABEL"])
print test_df["LABEL"][0]

下面是我得到的错误:

File "code.py", line 80, in <module>
    print test_df["LABEL"][0]
   File "/usr/local/lib/python2.7/dist-packages/pandas/core/series.py", line 521, in __getitem__
    result = self.index.get_value(self, key)
   File "/usr/local/lib/python2.7/dist-packages/pandas/core/index.py", line 3562, in get_value
    loc = self.get_loc(k)
   File "/usr/local/lib/python2.7/dist-packages/pandas/core/index.py", line 3619, in get_loc
    return super(Float64Index, self).get_loc(key, method=method)
   File "/usr/local/lib/python2.7/dist-packages/pandas/core/index.py", line 1572, in get_loc
    return self._engine.get_loc(_values_from_object(key))
   File "pandas/index.pyx", line 134, in pandas.index.IndexEngine.get_loc (pandas/index.c:3824)
   File "pandas/index.pyx", line 154, in pandas.index.IndexEngine.get_loc (pandas/index.c:3704)
   File "pandas/hashtable.pyx", line 541, in pandas.hashtable.Float64HashTable.get_item (pandas/hashtable.c:9914)
   File "pandas/hashtable.pyx", line 547, in pandas.hashtable.Float64HashTable.get_item (pandas/hashtable.c:9852)
 KeyError: 0.0

我错过了什么?

zkure5ic

zkure5ic1#

正如EdChum所说,0可能不在您的索引中。
尝试:df.iloc[0]df['label'].iloc[0],这是基于整数的位置。
如果遇到问题,要重置索引:df.reset_index(drop=True)
查看panda的indexing doc以了解更多信息

zte4gxcn

zte4gxcn2#

在OP中,变量名test_df表明它是通过将 Dataframe 拆分为训练集和测试集而创建的,因此test_df很可能没有index=0

0 in test_df.index

如果它返回False,则不存在index=0
不过,要访问第一行,可以使用test_df.iloctest_df.take()(类似于numpy.take)甚至loc

test_df.take([0])
test_df.iloc[0]
test_df.loc[test_df.index[0]]

对于标量值,甚至可以使用iat

test_df["LABEL"].iat[0]

如果索引并不重要,并且您希望将其重置为范围索引,则按照Seth的建议,重置索引;只要确保将结果赋回(以便更改是永久的)。

test_df = test_df.reset_index()            # the old index becomes a column in the dataframe
test_df = test_df.reset_index(drop=True)   # the old index is thrown away

如果 Dataframe 不包含具有特定名称的列,您也可能会收到列的键错误。常见的原因是前导/尾随白色,例如'LABEL '而不是'LABEL'。以下应返回True,以便您选择LABEL列。

'LABEL' in test_df.columns

如果上述返回False,请尝试

test_df.columns = test_df.columns.str.strip()

并再次尝试通过test_df['LABEL']进行选择。

相关问题