我正在使用多索引在数据框中查找值。df[值1,值2]。这有效,但如果该值不在索引中,则会引发 keyerror。我可以处理异常,但是否有与 python dict.get() 等效的语法?也就是说,如果找不到该值,我希望查找返回 None 。
标记
我正在使用多索引在数据框中查找值。df[值1,值2]。这有效,但如果该值不在索引中,则会引发 keyerror。我可以处理异常,但是否有与 python dict.get() 等效的语法?也就是说,如果找不到该值,我希望查找返回 None 。
标记
只需致电DataFrame.get()
:
In [50]: from pandas.util.testing import makeCustomDataframe as mkdf
In [51]: df = mkdf(5, 2, c_idx_nlevels=2, data_gen_f=lambda *args: rand())
In [52]: df
Out[52]:
C0 C_l0_g0 C_l0_g1
C1 C_l1_g0 C_l1_g1
R0
R_l0_g0 0.155 0.989
R_l0_g1 0.427 0.330
R_l0_g2 0.951 0.720
R_l0_g3 0.745 0.485
R_l0_g4 0.674 0.841
In [53]: level = df.columns[0]
In [54]: level
Out[54]: ('C_l0_g0', 'C_l1_g0')
In [55]: df.get(level)
Out[55]:
R0
R_l0_g0 0.155
R_l0_g1 0.427
R_l0_g2 0.951
R_l0_g3 0.745
R_l0_g4 0.674
Name: (C_l0_g0, C_l1_g0), dtype: float64
In [56]: df.get('how are you?')
In [57]: df.get('how are you?', 'Fine')
Out[57]: 'Fine'
您也可以只定义一个函数:
def get_from_index(df, key, default=None):
try:
return df.loc[key]
except KeyError:
return default
如果您的 df 在 'key1' 和 'key2' 列中有一个多索引,并且您想在 key1 和 yyy 上查找值 xxx ,试试这个
df.ix[df.index.get_level_values('key1') == xxx &
df.index.get_level_values('key2') == yyy]