【问题标题】:pd.DataFrame from an array in 2 different ways以 2 种不同方式从数组中获取 pd.DataFrame
【发布时间】:2019-03-05 00:08:15
【问题描述】:

我刚开始使用机器学习,所以我尝试了 kaggle 的 MINST。我真的很好奇事情是如何运作的,因为我在网上找不到答案,所以我认为在这里发表我的第一篇文章是个好主意。

我在 keras 上使用 CNN 做了一个简单的模型。这将是使用 google colab 输出的预测。

Ynew =model.predict_classes(test_data)
Ynew.shape

(28000,)

Ynew

数组([2, 0, 9, ..., 3, 9, 2])

现在我尝试用它制作一个 DataFrame,但我真的不明白为什么我可以用一种方式而不是另一种方式。

这个很好用,我得到了一张 28000x2 的桌子:

labels = ["ImageId","Label"]
col= list(range(1,28001))
submission=pd.DataFrame({"ImageId":col,"Label":Ynew})

但在这一排上,我把所有东西都挤在了 1 排里:

submission2=pd.DataFrame(data=[[col,Ynew]],columns=labels)

两种方式不应该一样吗? 希望帖子没有那么糟糕,谢谢!

【问题讨论】:

  • 第二种方式,你的括号可能太多了。数据 = [col, Ynew] ??
  • 谢谢@bakka,我尝试不使用双括号,但出现错误“2 列已通过,传递的数据有 28000 列”。我还更改了不包括列表命令的范围(1,28001)。有什么想法吗??
  • 是的,你是对的。执行 [col, Ynew] 将给出等于数组 (2, 28000) 的列表列表。您可以修改列表,但我认为创建 2D-ndarray 更容易。

标签: python pandas dataframe kaggle


【解决方案1】:

可以从以下位置创建数据框:

  1. 一维数组、列表、字典或系列的字典
  2. 二维 numpy.ndarray
  3. 结构化或记录ndarray
  4. 系列
  5. 另一个数据帧

参考:pandas-docs

在您的情况下,Ynew 是一维数组,loc 是一个列表。恕我直言,您只能从 Ynewloc 的字典创建数据框,就像您在第一种方法中所做的那样。

对于第二种方法,您需要将Ynewloc 变成2D-ndarray。

d = np.vstack([loc,Ynew]).T  # you will have (28000,2)
submission2=pd.DataFrame(data = d, columns=labels)

【讨论】:

  • 非常感谢您花时间解决我的问题。效果很好:)
【解决方案2】:
submission2=pd.DataFrame(data=Ynew, index=col, columns=labels)

【讨论】:

  • 感谢您的帮助。我尝试了这个稍作调整(我不能使用标签,因为它有 2 个元素)并得到了这个结果。 submission2=pd.DataFrame(data=Ynew,index=col,columns=["labels"]) submission2.index.rename("ImageID", inplace=True) 在实践中它运行良好,但 kaggle 不允许我上传带索引的文件,我需要 2 列。
猜你喜欢
  • 2017-01-15
  • 2018-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多