我正在尝试以下代码:
In [29]: indexes_to_search = [1, 3, 4]
In [30]: df = pd.DataFrame([(1, 2, 3), (4, 5, 6), (7, 8, 9)], columns=["id", "val1", "val2"]).set_index("id")
In [31]: df
Out[31]:
val1 val2
id
1 2 3
4 5 6
7 8 9
In [32]: df.loc[indexes_to_search]
Out[32]:
val1 val2
id
1 2.0 3.0
3 NaN NaN
4 5.0 6.0
出于某种原因,在结果中,在列中添加了3
个值为NaN
的索引。在我的真实问题中,indexes_to_search
可以包含非索引值(在我的示例中为行3
)。我想避免添加额外的行来删除我的DataFrame非常大的nan值。
所以问题是如何在没有NaN行的情况下搜索像.loc
这样的索引列表。
我希望:
val1 val2
id
1 2.0 3.0
4 5.0 6.0
答案 0 :(得分:5)
df1 = df.loc[df.index.intersection(indexes_to_search)]
print (df1)
val1 val2
1 2 3
4 5 6
或使用set
的十字路口:
df1 = df.loc[set(df.index).intersection(indexes_to_search)]
print (df1)
val1 val2
id
1 2 3
4 5 6
在我的pandas版本0.22.0中收到警告:
df1 = df.loc[indexes_to_search]
print (df1)
val1 val2
id
1 2.0 3.0
2 NaN NaN
3 NaN NaN
FutureWarning:
将列表喜欢传递给.loc或[]以及任何缺少的标签将来会引发 KeyError ,您可以使用.reindex()作为替代