DataFrame.drop 适用于列表,但不适用于元组



我不觉得直观,当tuple传递给DataFrame.drop()时,它会抛出错误,但是当传递list时它会起作用。

给定此数据帧:

df = pd.DataFrame(np.arange(12).reshape(3, 4),columns=['A', 'B', 'C', 'D'])

以下作品:

df.drop(['A', 'B'], axis=1)

但以下情况并非如此:

df.drop(('A', 'B'), axis=1)

错误:

KeyError: "[('A', 'B')] not found in axis"

该错误使代码尝试执行的操作更加清晰,但对我来说仍然没有意义。我忽略了什么吗?

tuples是不可变和可哈希的对象,因此,您可能tuples数据框中的索引。但是,它们也是可迭代对象,因此这是歧义的来源:使用元组时,您是指可迭代对象还是对象本身?由于它们是可哈希的,熊猫会解释为后者,并尝试在您的情况下找到一个包含元组('A', 'B')作为其名称的列。

另一方面,lists是不可哈希的,因为它们是可变的,你不能将它们作为索引/列。因此,这里没有歧义:当你传递一个列表时,你总是意味着一个可迭代对象。

最新更新