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

API拉取数据后无法拆分DataFrame中ticker_sentiment列

解决Alpha Vantage新闻情感API数据拆分问题

你的问题出在ticker_sentiment列的结构上——它是列表嵌套字典的格式,直接转DataFrame只会保留列表结构,无法拆分出ticker、relevant_score等字段。以下是修正后的实现方案:

修正代码

import pandas as pd
import requests
import json

url = "https://www.alphavantage.co/query?function=NEWS_SENTIMENT&topics=technology,ipo&apikey=demo"
data2 = requests.get(url)
r = json.loads(data2.text)

# 直接对API返回的feed列表做json_normalize,简化流程
df2 = pd.json_normalize(r['feed'])

# 第一步:将每个列表中的ticker情感字典拆分为单独行
df_exploded = df2.explode('ticker_sentiment', ignore_index=True)

# 第二步:将字典格式的ticker_sentiment拆分为多列
df3 = pd.json_normalize(df_exploded['ticker_sentiment'])

# 可选:如果需要保留原新闻条目其他字段,合并回数据
# df_final = df_exploded.drop('ticker_sentiment', axis=1).join(df3)

print(df3)

关键修正点

  1. 跳过冗余步骤:原代码先将整个API响应转成DataFrame再取feed,可以直接用pd.json_normalize(r['feed'])一步生成新闻条目DataFrame。
  2. 展开列表字段:用explode()把ticker_sentiment列中的每个字典从列表里拆出来,变成独立行。
  3. 拆分字典为列:用pd.json_normalize()将每个字典的键值对拆成单独的列,这样就能得到ticker、relevant_score、ticker_sentiment_score等字段。

如果你的场景中每个新闻条目只对应一个ticker情感字典(而非列表),可以简化为df3 = df2['ticker_sentiment'].apply(pd.Series),但Alpha Vantage的该API返回的ticker_sentiment默认是列表结构,因此必须先执行explode操作。

内容的提问来源于stack exchange,提问作者Aamina Thasneem Khaleel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:56:05