使用Lambda函数搜索DataFrame无结果时,如何解决IndexError?
解决空搜索结果引发的IndexError问题
当搜索词不存在时,过滤后的DataFrame是空的,直接传给tabulate会触发IndexError(因为没有行数据可供解析)。解决思路很直接:先判断过滤结果是否为空,再决定输出内容。
修改后的代码如下:
searchterm = input("Enter search term: ") sheet1_name = 'MySheetName' sheet1_id = 'MyGoogleSheetID' sheet1_url = f'https://docs.google.com/spreadsheets/d/{sheet1_id}/gviz/tq?tqx=out:csv&sheet={sheet1_name}' df = pd.read_csv(sheet1_url) # 执行搜索过滤逻辑 filtered_df = df[df.map(lambda x: isinstance(x, str) and searchterm.lower() in x.lower()).any(axis=1)] # 判断结果是否为空,分情况输出 if not filtered_df.empty: print(tabulate(filtered_df, headers='keys', tablefmt='simple_grid', maxcolwidths=[None, None, 100])) else: print("No results.")
关键说明
- 用
filtered_df.empty属性判断DataFrame是否为空,这是Pandas官方推荐的高效判断方式 - 将过滤结果存入新变量(也可复用原变量),逻辑更清晰,也避免误操作原数据
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

