首页 > 解决方案 > 当键不在索引中时,如何(惯用地)使用 pandas .loc 返回一个空数据框

问题描述

假设我有一个 DataFrame(就此而言,具有多索引),并且我希望在某个索引处获取值 - 但是,如果该索引不存在,我希望它返回一个空 df 而不是KeyError.
我已经搜索过类似的问题,但它们都是关于 Pandas 在某些情况下不需要返回空数据帧的问题(相反,我确实希望得到一个空数据帧作为回报)。

例如:

import pandas as pd
df = pd.DataFrame(index=pd.MultiIndex.from_tuples([(1,1),(1,2),(3,1)]), 
                  columns=['a','b'], data=[[1,2],[3,4],[10,20]])

所以,df 是:

        a   b
1   1   1   2
    2   3   4
3   1   10  20

并且df.loc[1]是:

    a   b
1   1   2
2   3   4

df.loc[2]引发 a KeyError,我想要返回的东西

    a   b

我能得到的最接近的方法是df.loc[idx:idx]作为切片调用,它为idx=2 提供正确的结果,但对于idx=1 它返回

        a   b
1   1   1   2
    2   3   4

而不是欲望的结果。

当然我可以定义一个函数来做到这一点,

标签: pandasdataframe

解决方案


一个想法与if-elsestatament:

def get_val(x):
    return df.loc[x] if x in df.index.levels[0] else pd.DataFrame(columns=df.columns)

或者一般带有try-except声明:

def get_val(x):
    try:
        return df.loc[x]
    except KeyError:
        return pd.DataFrame(columns=df.columns)

print (get_val(1))
   a  b
1  1  2
2  3  4

print (get_val(2))
Empty DataFrame
Columns: [a, b]
Index: []    

推荐阅读