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)
我有一个包含 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)