使用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
相关产品推荐
相关产品推荐

