不再支持将 list-likes 传递给 .loc 或 [] 缺少任何标签

swa*_*yak 42 python numpy dataframe pandas

我想用指定的列创建一个修改后的数据框。我尝试了以下操作,但抛出错误“不再支持将类似列表的文件传递给 .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
Run Code Online (Sandbox Code Playgroud)

谢谢

Joe*_*yie 39

看起来 Pandas 已经弃用了这种索引方法。根据他们的文档

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

使用新的推荐方法,您可以使用以下方法过滤列:

tips_filtered = tips_df.reindex(columns = filtered_columns).

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


WeN*_*Ben 14

列表中的某些列未包含在数据框中,如果您确实想这样做,让我们尝试一下 reindex

tips_filtered = tips_df.reindex(columns=filtered_columns)
Run Code Online (Sandbox Code Playgroud)


den*_*lov 11

我遇到了同样的错误,缺少行索引标签而不是列
例如,我将有一个具有以下 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'])
Run Code Online (Sandbox Code Playgroud)

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

如果我尝试这个更新的索引传递给我的DF数据帧:df.loc[row_indices,:]

我会收到这个令人讨厌的错误消息:

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

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

df.loc[df.index.intersection(row_indices),:]  
Run Code Online (Sandbox Code Playgroud)

这符合pandas docs的建议