Skip to main content
 首页 » 编程设计

python之按 pandas 中的索引列表搜索

2025年05月04日19rubylouvre

我正在尝试以下代码:

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 行)。我想避免添加额外的行来删除 nan 值,因为我的 DataFrame 非常大。 所以问题是如何在没有 NaN 行的情况下按 .loc 之类的索引列表进行搜索。 我希望:

    val1  val2 
id             
1    2.0   3.0 
4    5.0   6.0 

请您参考如下方法:

需要Index.intersection :

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:

Passing list-likes to .loc or [] with any missing label will raise KeyError in the future, you can use .reindex() as an alternative