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

Jupyter Notebook本地报错TypeError,办公电脑正常求解决方法

解决TypeError: 'float' object is not subscriptable问题

错误原因

你的代码里用x[1:]默认Value列所有值都是带$符号的字符串,但个人电脑上该列存在float类型的值(比如空值NaN或直接存储的浮点数),对float做下标访问就会触发这个错误。

两台电脑表现不同,大概率是pandas版本差异导致的:不同版本的pandas读取CSV时,对混合类型列的推断逻辑不一样——办公电脑的pandas把Value列全识别为字符串,而个人电脑的pandas自动把部分值转成了float。

修复方案

无需更新系统,调整代码即可兼容两种场景:

方案1:自定义处理函数(更灵活)

import pandas as pd
pd.set_option('display.max_colwidth', None)
jeopardy = pd.read_csv('jeopardy.csv')
jeopardy.rename(columns=lambda x: x.strip(), inplace=True)

print(jeopardy.head())

def convert_to_float(x):
    # 先统一转成字符串,避免float类型报错
    x_str = str(x).strip()
    if x_str.startswith('$'):
        return float(x_str[1:].replace(',', ''))
    # 处理非$开头的情况(比如空值、纯数字)
    try:
        return float(x_str)
    except:
        return None

jeopardy["Value_float"] = jeopardy['Value'].apply(convert_to_float)

方案2:pandas字符串方法链式处理(更简洁)

利用pandas的str方法自动跳过非字符串值:

import pandas as pd
pd.set_option('display.max_colwidth', None)
jeopardy = pd.read_csv('jeopardy.csv')
jeopardy.rename(columns=lambda x: x.strip(), inplace=True)

print(jeopardy.head())

jeopardy["Value_float"] = jeopardy['Value'].astype(str).str[1:].str.replace(',', '').astype(float)

验证建议

在个人电脑上运行以下代码,确认Value列的实际类型:

print(jeopardy['Value'].dtype)
print(jeopardy['Value'].apply(type).unique())

可以直接看到该列是否存在float类型元素,精准定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:45:58