我试图通过查找来访问多列数据框中的标量值,如下所示:
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
?你会如何处理这种情况?
我不希望我的脚本在找不到任何内容时失败。
答案 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/except
或if/else
。当然,很多方法都取决于你方便的事情。