不再支持将类似列表的标签传递给.loc或[]且缺少任何标签

时间:2020-04-18 15:34:14

标签: python pandas numpy dataframe

我想用指定的列创建一个修改的数据框。 我尝试了以下操作,但抛出错误“不再支持将缺少列表的标签传递给.loc或[]并且缺少任何标签”

# columns to keep
filtered_columns = ['text', 'agreeCount', 'disagreeCount', 'id', 'user.firstName', 'user.lastName', 'user.gender', 'user.id']
tips_filtered = tips_df.loc[:, filtered_columns]

# display tips
tips_filtered

谢谢

4 个答案:

答案 0 :(得分:11)

熊猫似乎已不赞成使用这种索引方法。根据他们的docs

此行为已弃用,并显示警告消息指向 到本节。推荐的替代方法是使用.reindex()

使用新的recommended method,您可以使用以下方法过滤列:

tips_filtered = tips_df.reindex(columns = filtered_columns)

注意:要重新索引行,可以使用reindex(index = ...)(更多信息here)。

答案 1 :(得分:6)

数据框中未包含列表中的某些列,如果您希望这样做,让我们尝试reindex

tips_filtered = tips_df.reindex(columns=filtered_columns)

答案 2 :(得分:0)

我实际上也碰到了这个错误,上面的hack修复了它,但是我不明白为什么...我在个人计算机上尝试了类似的调用,而不是我正在使用的笔记本内核,并且将.loc []与列表格式的列名称的子集配合使用时效果很好。我知道这不是问题的答案,但是我是堆栈溢出的新手,还无法发表评论,但想在为什么引发此错误中进行说明?

答案 3 :(得分:0)

我遇到了相同的错误,缺少行索引标签而不是列
例如,我将拥有一个具有以下ID的产品数据集:['a','b','c','d']。我将这些产品存储在索引为['a','b','c','d']的数据框中:

df=pd.DataFrame(['product a','product b','product c', 'product d'],index=['a','b','c','d'])

现在让我们假设我有一个更新的产品索引: row_indices=['b','c','d','e'],其中“ e”对应于一个新产品:“产品e”。请注意,我的原始索引['a','b','c','d']中没有'e'。

如果我尝试将此更新的索引传递到我的df数据帧:df.loc[row_indices,:]

我会收到以下讨厌的错误消息:

KeyError:“不再支持将缺少列表的标签传递给.loc或[]。缺少以下标签:Index(['e'],dtype ='object')。

为避免此错误,我需要将更新后的索引与原始索引相交:

df.loc[df.index.intersection(row_indices),:]  

this is in line with recommendation of what pandas docs