You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas读取Google Sheet搜索DataFrame返回空报索引越界错误

问题根因

匹配为空、后续索引越界的核心原因是Google Sheets API返回的单元格值默认全为字符串类型,和本地读取CSV的类型处理逻辑不一致:

  • 本地用pd.read_csv()读取文件时,pandas会自动识别列内容格式,把存纯数字的Alternate ID列转为整数类型,你将输入转为整数后匹配可以正常命中
  • 通过Sheets API拉取到的values是原生二维列表,所有单元格内容都保留字符串格式,哪怕内容是纯数字也不会自动转类型。你拿整数类型的搜索值和字符串类型的列值做相等判断,pandas会直接返回False,导致匹配结果为空数组,后续取第0个元素时就触发index 0 is out of bounds for axis 0 with size 0报错。

另外还有个容易踩的隐藏坑:Sheets API返回行数据时,如果行尾单元格为空,会直接截断列表长度,比如某行Actual Cost列是空值,返回的列表长度会比定义的列数少1,构造DataFrame时对应位置会自动补NaN,不做处理也容易触发类型错误。

修复方法
  1. 构造DataFrame后,显式将需要匹配、计算的数字列转为对应数值类型,不依赖自动类型推断
  2. 对匹配结果加非空判断,避免输入不存在的库存号时程序直接崩溃

修正后的核心代码段如下:

df = pd.DataFrame(values, columns = ['Location', 'Inv Status Code', 'Model #', 'Alternate ID', 'Serial #', 'Model Description', 'Actual Cost'])

# 显式转换数字列类型,异常值/空值统一填充默认值,避免转类型报错
df['Alternate ID'] = pd.to_numeric(df['Alternate ID'], errors='coerce').fillna(0).astype(int)
df['Actual Cost'] = pd.to_numeric(df['Actual Cost'], errors='coerce').fillna(0)

# 获取用户输入
searchAlt = int(input("Stock Number: ").lstrip("0"))
condition = int(input("Condition 1-10: "))

# 匹配前先判断结果是否存在
match_res = df.loc[df['Alternate ID'] == searchAlt, 'Actual Cost']
if match_res.empty:
    print(f"错误:未找到库存编号为{searchAlt}的对应记录,请检查输入")
    # 可在此处加退出逻辑,比如 exit()
else:
    costi = match_res.values[0]
    # 后续定价计算、标签生成逻辑写在这里

如果改完仍存在匹配问题,可以先执行print(df.dtypes)确认Alternate ID列的类型为int32/int64,再打印print(type(df['Alternate ID'].iloc[0]), type(searchAlt))确认两边值的类型一致,即可排除类型不匹配导致的匹配失败问题。

内容的提问来源于stack exchange,提问作者Shane Bowe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 20:24:09