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

如何在Pandas DataFrame中计算列值差值并解决字符串类型错误

Fixing TypeError When Calculating Price Delta in Pandas from API Data

Hey there! That TypeError you're seeing happens because the values in your open and close columns are stored as strings (str), and Python can't subtract two strings directly. Don't worry, this is super common when pulling data from APIs—sometimes the JSON response sends numeric values as text. Here's how to fix it:

Solution 1: Convert Columns to Numeric Types with pd.to_numeric()

This is the most reliable approach, especially if there's a chance the API might return non-numeric values (like empty strings or unexpected text) in those columns. Update your code like this:

import requests
import json
import pandas as pd

payload = {"key": "value"}
response = requests.get("URL", params=payload)
api_data = json.loads(response.text)
data = pd.DataFrame(api_data)

# Convert 'open' and 'close' columns to numeric values
# errors='coerce' turns invalid entries into NaN instead of crashing
data['open'] = pd.to_numeric(data['open'], errors='coerce')
data['close'] = pd.to_numeric(data['close'], errors='coerce')

# Now the subtraction will work
current_day_delta = data['close'].iloc[-1] - data['open'].iloc[-1]
print(current_day_delta)

Why This Works

pd.to_numeric() automatically detects string-formatted numbers (like "123.45" or "678") and converts them to integers or floats. The errors='coerce' flag is a safety net—if any value can't be converted to a number (say, a string like "N/A"), it gets turned into NaN instead of throwing another error.

Quick Check to Confirm

Before running the calculation, you can verify the data types to make sure the conversion worked:

print(data.dtypes)

You should see float64 or int64 for the open and close columns instead of object (which is Pandas' way of saying "string").

Alternative: Convert All Numeric Columns at Once

If you want to convert all your financial columns (open, high, low, close, volume) in one go, you can loop through them:

numeric_columns = ['open', 'high', 'low', 'close', 'volume']
data[numeric_columns] = data[numeric_columns].apply(pd.to_numeric, errors='coerce')

This saves you from writing separate lines for each column.

I remember hitting this exact issue when I was first working with APIs and Pandas—once you get the hang of data type conversions, these kinds of errors become easy to fix!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:49:24