我有一份Excel报告,其中有几张表格排列在表格中,我正在用Pandas解析它。我正在从报告中抓取的关键值对总是在同一列中。因此,我将查找分组到密钥值相同的组中,并使用iloc
查找正确的行:
df[df.iloc[:, key_column] == 'apple'][value_column].values[0]
每个文件中都有许多键,但偶尔会出现一个键。在罕见的情况下,永远存在的密钥不存在,整个块将失败(index 0 is out of bounds for axis 0 with size 0
)
try:
parsed_xls['fruit'] = df[df.iloc[:, key_column] == 'apple'][value_column].values[0]
parsed_xls['vegetable'] = df[df.iloc[:, key_column] == 'onion'][value_column].values[0]
parsed_xls['stationary'] = df[df.iloc[:, key_column] == 'stapler'][value_column].values[0]
except:
# error reporting
在密钥搜索失败时,将每个密钥,值对放入其自己的try...except
或辅助函数以提供零值是不够的...
是否有更多类似Pandas的方式来处理引发此异常的iloc
查找(并且仍会捕获错误)?
答案 0 :(得分:2)
简短的回答是"否" - 当 将逻辑包装在辅助函数中时,我认为没有理由存在这样的功能。
正如您所提到的,如果您偶尔只看到IndexError
,请尝试/ except优先于if / else。
import pandas as pd, numpy as np
df = pd.DataFrame(np.random.randint(0, 9, (1000, 10)))
res = df.loc[df.iloc[:, 20] == 6, 5].values[0]
# IndexError: index 0 is out of bounds for axis 0 with size 0
def lookup_fn(df, key_col, key_val, val_col, idx=0):
try:
return df[df.iloc[:, key_col] == key_val][val_col].values[idx]
except IndexError:
return 0
res = lookup_fn(df, 20, 6, 5)
# 0