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

计算纳斯达克数据价差时报错:TypeError: 不支持字符串间减法运算

解决纳斯达克CSV数据价格计算的TypeError问题

问题根源

你的Price列数据是字符串类型(可能包含美元符号、逗号或其他非数字字符),调用min()/max()得到的是字符串的排序最值,而非数值,因此无法直接做减法运算,触发TypeError。

解决方案

先清洗并转换Price列为数值类型,再进行计算:

  1. 检查列类型(可选)
    先确认Price列的类型:

    print(df["Price"].dtype) # 输出object即为字符串类型
    
  2. 清洗并转换数值
    如果Price包含非数字字符(如$、,),先移除再转成float:

    # 移除美元符号和逗号(根据你的CSV实际格式调整)
    df["Price"] = df["Price"].str.replace('$', '', regex=False).str.replace(',', '', regex=False)
    # 转换为数值类型,无法转换的设为NaN
    df["Price"] = pd.to_numeric(df["Price"], errors="coerce")
    

    若CSV里的Price没有特殊符号,直接用pd.to_numeric即可。

  3. 处理缺失值(可选)
    转换后若出现NaN(无效数据),可删除对应行:

    df = df.dropna(subset=["Price"])
    
  4. 计算高低点、差值及斐波那契50%回撤位

    min_price = df["Price"].min()
    max_price = df["Price"].max()
    difference = max_price - min_price
    fib_50_retracement = (max_price + min_price) / 2 # 更简洁的50%回撤位计算方式
    
    print(f"最高价格: {max_price}")
    print(f"最低价格: {min_price}")
    print(f"高低点差值: {difference}")
    print(f"50%斐波那契回撤位: {fib_50_retracement}")
    print(df.head(10))
    

完整修正代码

import pandas as pd

# 加载CSV数据
df = pd.read_csv("C:/Users/Pizzle/Documents/NQ 100 Data.csv")

# 清洗并转换Price列为数值类型
df["Price"] = df["Price"].str.replace('$', '', regex=False).str.replace(',', '', regex=False)
df["Price"] = pd.to_numeric(df["Price"], errors="coerce")

# 删除无效数据行
df = df.dropna(subset=["Price"])

# 计算所需指标
min_price = df["Price"].min()
max_price = df["Price"].max()
difference = max_price - min_price
fib_50_retracement = (max_price + min_price) / 2 # 更简洁的50%回撤位计算方式

# 输出结果
print(difference)
print(min_price)
print(max_price)
print(f"50%斐波那契回撤位: {fib_50_retracement}")
print(df.head(10))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:30:16