如果pandas df中的索引访问失败怎么办?

时间:2017-01-09 16:16:09

标签: python pandas

我试图通过查找来访问多列数据框中的标量值,如下所示:

targetDate = '2016-01-01'
df['revenue'][df['date']== targetDate].values[0]

现在,就我而言,targetDate的数据框中找不到任何内容。所以我得到以下索引错误:

IndexError: ('index 0 is out of bounds for axis 0 with size 0', 'occurred at index 69322')

在这种情况下,是否有一个内置的pandas优雅地导致np.nan?你会如何处理这种情况?

我不希望我的脚本在找不到任何内容时失败。

2 个答案:

答案 0 :(得分:1)

您可以检查Series是否为空,然后添加if-else

targetDate = '2016-01-01'
a = df.loc[df['date']== targetDate, 'revenue']
print (a)
Series([], Name: revenue, dtype: int32)

if len(a) == 0:
    print ('empty')
else:
    first_val = a.values[0]

Series.empty类似的解决方案:

if a.empty:
    first_val = np.nan
else:
    first_val = a.values[0]

print (first_val)

答案 1 :(得分:1)

如果您在head(1)之前,并删除了值的下标,那么这将避免错误消息,尽管它不会填充nan(它只是一个空的numpy数组)。

df['revenue'][df['date']== targetDate].head(1).values

但你可以做这样的事情来获得一个纳米而不是空。

df['revenue'][df['date']== targetDate].append(pd.Series(np.nan)).head(1).values

或者以@jezrael为try/exceptif/else。当然,很多方法都取决于你方便的事情。