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

使用Pandas创建带标签的DataFrame时返回空表,请求原因分析

我来帮你排查这个问题,你的代码里有两个关键问题导致生成了空DataFrame,咱们一步步拆解来看:

1. 先解决语法错误(否则代码根本跑不起来)

看你定义book_ratings时的columns参数:

columns=["authors","books","user_1"",user_2","user_3","user_4"]

这里user_1后面多了一个冗余的双引号,应该修正为:

columns=["authors","books","user_1","user_2","user_3","user_4"]

这个语法错误会直接触发报错,如果你运行时没修正,根本到不了生成空DataFrame的步骤,所以先把这个小问题解决掉。

2. 核心问题:DataFrame的构造逻辑错误

你创建dat的方式完全不符合Pandas的预期:

  • 你把所有Series塞进一个新的pd.Series再转成字典,最终得到的字典键是0-5(新Series的索引),值是你原来的各个Series,也就是{0: authors, 1: books, 2: user_1,...};
  • 随后你用这个字典创建DataFrame,同时指定columns为["authors","books",...],但字典里根本没有这些键(只有0-5),Pandas找不到匹配的列数据,自然就生成了空DataFrame。

正确的构造方式

应该直接用列名作为字典的键,对应Series作为值来构造DataFrame,Pandas会自动对齐所有Series的索引,缺失的位置用NaN填充:

import numpy as np
import pandas as pd

books = pd.Series(data = ['Great Expectations', 'Of Mice and Men', 'Romeo and Juliet', 'The Time Machine', 'Alice in Wonderland' ])
authors = pd.Series(data = ['Charles Dickens', 'John Steinbeck', 'William Shakespeare', ' H. G. Wells', 'Lewis Carroll' ])
user_1 = pd.Series(data = [3.2, np.nan ,2.5])
user_2 = pd.Series(data = [5., 1.3, 4.0, 3.8])
user_3 = pd.Series(data = [2.0, 2.3, np.nan, 4])
user_4 = pd.Series(data = [4, 3.5, 4, 5, 4.2])

# 直接构造列名与Series对应的字典
dat = {
    "authors": authors,
    "books": books,
    "user_1": user_1,
    "user_2": user_2,
    "user_3": user_3,
    "user_4": user_4
}

book_ratings = pd.DataFrame(dat)
print(book_ratings)

运行这段代码后,你会得到包含所有书籍信息和用户评分的DataFrame,未评分的位置会自动用NaN填充。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 06:27:30