Python:按列表对数据帧进行切片 returns 比预期更长的列表

Python: Slicing a dataframe by a list returns a longer list than expected

我有一个包含 517 个元组的列表。当我使用该列表使用 .loc 对我的数据帧进行切片时,不知何故有 518 行。如果重要的话,这些是 multi-index 的 517 个元组。结果的视觉检查似乎没有明显的 header 或空行。

print(submatrix2.shape)
x = list(get_list_of_university_towns().itertuples(index=False, name=None))
print(len(x))
univ_matrix = submatrix2.loc[x,] 
print(univ_matrix.shape)

输出:

(10730, 1)
517
(518,1)

是什么导致了这种不匹配?

你可能有一个重复的索引,这使得你的最终形状比你传递的列表更大。

可重现的例子:

df = pd.DataFrame({'vals':["a", "b", "c", "d"],
                   'n':[0,1,1,2]})

df = df.set_index('n')


    vals
n   
0   a
1   b
1   c
2   d

现在

>>> x=[0,1,2];len(x)
3
>>> df.loc[x,:].shape
(4, 1)