Pandas:什么是NDFrame对象(以及什么是非NDFrame对象)

20
我试图连接两个DataFrames,但是出现了`'TypeError: cannot concatenate a non-NDFrame object'`的错误。我找到了很多人遇到这个错误,但大多数情况下他们试图做与代码实际内容不相关的事情(因此答案解决了他们特定但无关的问题)。
我的问题不是解决我的具体问题,而是要理解这个错误......什么是non-NDFrame对象?为什么不能将其连接?
此外,为什么会涉及到NDFrames(它们是什么,我在哪里使用它们?所有DataFrames都是NDFrames吗?有没有NDFrames不是DataFrames?)...
如果它说`'TypeError: cannot concatenate a non-DataFrame object'`,我就能理解了(虽然我不确定它们不是DataFrames是否导致了我的错误)。这主要是出于好奇心,我并不打算寻找任何特定的错误...

3
这可能意味着你正在尝试连接一堆“Series”数据。NDFrame表示N维,因此至少是2维,而Series只有1维。问题在于你正在尝试基于索引和列名进行连接和对齐。Series具有索引但没有列名(虽然有名称属性,但这不同),它可以被处理,但该实现不支持这种操作。 - EdChum
2
或者你传递的东西类型不是 ND-Frame,比如一个 numpy 数组,实际上连接一系列 pandas Series 的列表会起作用。你需要发布原始数据和代码来演示你正在尝试什么。 - EdChum
我很尴尬,我已经修复了代码,现在似乎无法再现我的错误,所以可能是你所说的...但我的问题不是关于我的错误,而是什么是NDFrame对象...在stackoverflow上似乎没有关于它的问题。对我来说,DataFrame是一个NDFrame(?)。通过谷歌搜索,我得到的是“pandas.core.generic.NDFrame是一个N维数据结构的类似于DataFrame的对象,它存储多维标记数据结构”,但我想要更详细的解释,它是什么,它的作用是什么,它不是什么,以及它与DataFrame的关系... - ntg
只要将其视为N维数组,没有比这更复杂的东西。 - EdChum
对于在搜索结果中找到此页面的其他人,如果您在将数据框列表的变量名称传递给pd.concat后遇到此错误,请仔细检查是否将该变量名称括在括号中(这将创建一个列表的列表,这是一个非NDFrame对象)。 - pearsonpark
在我的情况下,当我移除数据框名称周围的单引号时,它就起作用了。 - shantanuo
1个回答

28

消息来源:

DataFrame 的 N 维度模拟。使用可变大小、标记数据结构存储多维数据。

那么,DataFrame 是什么?

class DataFrame(NDFrame): 二维的大小可变、可能不同类型的表格型数据结构,带有标签轴 (行和列)。算术运算根据行和列标签对齐。可以将其视为 Series 对象的类似字典的容器。

可以看出,DataFrame 是 NDFrame 的子类(即特殊情况)。在 Pandas 程序中,通常会频繁使用 DataFrame 而很少使用 NDFrame。实际上,Pandas 为 1D 提供了 Series,为 2D 提供了 DataFrame,尽管 Pandas 的名称中一半是“Panel”,但大多数人并不使用 Pandas 还提供了 Panel

甚至在 Pandas 中还有一个 4D 的东西,但真正使用它的人几乎没有(因为这是互联网,总会有人出现说他们使用它!)。对于高于二维或三维的情况,一些人已经将他们的努力转移到了 xarray 上。如果您的抱负无法在 2D 中实现,那可能就是适合您的地方。


13
哇!三年了都没有人说“我使用四维数组”。令人印象深刻。 - msemelman
显然在v1.0中删除了Panel,此前它已经在v0.20版本被弃用 - wjandrea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接