我想用指定的列创建一个修改的数据框。 我尝试了以下操作,但抛出错误“不再支持将缺少列表的标签传递给.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
谢谢
答案 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),:]