计算纳斯达克数据价差时报错:TypeError: 不支持字符串间减法运算
解决纳斯达克CSV数据价格计算的TypeError问题
问题根源
你的Price列数据是字符串类型(可能包含美元符号、逗号或其他非数字字符),调用min()/max()得到的是字符串的排序最值,而非数值,因此无法直接做减法运算,触发TypeError。
解决方案
先清洗并转换Price列为数值类型,再进行计算:
检查列类型(可选)
先确认Price列的类型:print(df["Price"].dtype) # 输出object即为字符串类型清洗并转换数值
如果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即可。处理缺失值(可选)
转换后若出现NaN(无效数据),可删除对应行:df = df.dropna(subset=["Price"])计算高低点、差值及斐波那契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
相关产品推荐
相关产品推荐

