PANDAS:传递的索引形状不正确,不知道如何修复它

Posted

技术标签:

【中文标题】PANDAS:传递的索引形状不正确,不知道如何修复它【英文标题】:PANDAS: Incorrect shape of indices passed, not sure how to fix it 【发布时间】:2013-11-06 20:00:19 【问题描述】:

我正在尝试在数据框中生成第 7 列:

arb_ser_num       = 'zDfDD45'
predefined_number = 878

                 DATE                    Q1    Q2    Q3    Q4    Q5
0 2012-08-20 00:00:00   [Atlantic, Z, dEdd]  None  None  None  None 
1 2012-08-21 00:00:00    [Pacific, Y, dEdd]  None  None  None  None
2 2012-08-22 00:00:00     [Indian, Y, dRdd]  None  None  None  None
3 2012-08-23 00:00:00    [Meditar, Z, dEdd]  None  None  None  None
4 2012-08-24 00:00:00     [Arctic, Z, dRdd]  None  None  None  None


df['Q6'] = df.apply(lambda row: get_q6(arb_ser_num, row, predefined_number), axis = 1)

有时 get_q6 会返回 [1,2,3,4,5],有时会返回 [None]。我不断收到错误:

Shape of passed values is (5,), indices imply (5, 6)

我不知道如何解决它。我发现了类似的东西here,但我认为它不适用于我。我正在尝试跟踪海洋温度/洋流。

【问题讨论】:

你能在例子中显示错误吗?类似 df['Q6'] = df.apply(lambda x: None if x['Q5'] == 1 else [1,2,3,4,5], axis=1) 在 Q5 在的示例数据帧[1,2,3] 工作正常 您是否尝试使用axis=0?应该是这种情况,因为您想为每一行应用该函数... 我刚试了一下,没用。根据pandas.pydata.org/pandas-docs/dev/generated/…axis=1 是应用于每一行。 @RomanPekar 你的意思是我应该发布整个错误信息吗? 看来错误在get_q6。你能给我们一个具体的案例,get_q6 的输出与预期的输出不同吗? 【参考方案1】:

我也遇到了这个错误。原来是熊猫时间序列数据类型导致了这个问题。当我应用以纪元(或任何东西)表示的时间成功的函数,但将时间转换为熊猫时间序列时,出现了这个错误。所以我的建议是在应用函数后转换为时间序列,这显然取决于你在应用的函数中不需要时间变量。

*apply 函数未使用 pandas Time Spans 测试。

【讨论】:

原来如此!对我来说似乎是一个错误:(【参考方案2】:

解决方案,TL;DR

使函数返回与原始数据框中的列数相等的元素数。所以在这种情况下,让get_q6 返回 6 个元素,这样返回数组的第一行正好有 6 个元素。

原因

浏览 Pandas 源代码。在您的情况下,原始数据框的形状为implied=(5,6)。因此,Pandas 内部的internals.construction_error() 尝试验证应用函数get_q6 后返回的数组是否具有相同的形状。

在返回的数组中,当您在每一行上应用 func 时,您有 5 行。现在要查找列,它需要返回数组的 first 行。如果get_q6 有6 个元素,那么它将验证它们都具有(5,6) 的形状。

但在您的情况下,返回的数组有 5 个元素(当 get_q6 返回 [1,2,3,4,5])或只有 1 个(当 get_q6 返回 [None]),NOT 6 个元素为它想要。可能在第一行get_q6 returns[None]. So the shape of the returned array is calculated aspassed=(5,1)`。

最后,implied==passed 评估为 false 并引发错误。

【讨论】:

以上是关于PANDAS:传递的索引形状不正确,不知道如何修复它的主要内容,如果未能解决你的问题,请参考以下文章

PYODBC到Pandas - DataFrame不工作 - 传递值的形状是(x,y),索引暗示(w,z)

Pandas:ValueError:传递值的形状是(110、10),索引暗示(111、10)

Pandas concat:ValueError:传递值的形状是blah,索引暗示blah2

PYODBC 到 Pandas - DataFrame 不起作用 - 传递值的形状是(x,y),索引暗示(w,z)

对于 Keras ANN,Pandas 数据框的形状不正确

ValueError:传递值的形状为 (569, 30),索引暗示 (569, 31)