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

为何调用DataFrame构造函数时出现ValueError错误?

问题分析与解决

错误原因

你直接用pd.DataFrame(json['message'])和pd.DataFrame(json['error'])会报错,是因为Reddit API返回的错误响应里:

  • json['message']是字符串类型
  • json['error']是整数类型
    而pandas的DataFrame构造函数需要接收可迭代结构(比如列表、字典数组等),直接传入单个字符串/数字不符合要求,所以触发ValueError。

另外,你当前的请求没有设置User-Agent头,Reddit的API会拒绝无标识的请求,这大概率是你拿到错误响应的根本原因。

修正代码

import requests
import pandas as pd

url= 'https://www.reddit.com/r/Wallstreetbets/top.json?limit=10&t=year'
# 必须添加User-Agent标识,否则Reddit会拒绝请求
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'}
r= requests.get(url, headers=headers)
json_data = r.json()

# 处理两种情况:请求失败/请求成功
if 'error' in json_data:
    # 将错误信息包装成可迭代的字典列表,再构造DataFrame
    error_df = pd.DataFrame([{'错误码': json_data['error'], '错误信息': json_data['message']}])
    print(error_df)
else:
    # 正常提取帖子数据:从data->children中取出每条帖子的详情
    posts = [item['data'] for item in json_data['data']['children']]
    message_df = pd.DataFrame(posts)
    print(message_df.head())

关键说明

  1. User-Agent必须设置:可以用浏览器的标识(比如示例中的Chrome信息),否则Reddit会返回429或错误响应。
  2. 错误响应处理:把单个的错误码和信息包装成[{'键': 值}]这种列表结构,让DataFrame能正确识别列和行。
  3. 正常数据提取:Reddit的帖子数据嵌套在json_data['data']['children']里,每个子项的data字段才是单条帖子的完整信息,需要遍历提取后再构造DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:05:31