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 as
passed=(5,1)`。
最后,implied==passed
评估为 false 并引发错误。
【讨论】:
以上是关于PANDAS:传递的索引形状不正确,不知道如何修复它的主要内容,如果未能解决你的问题,请参考以下文章
PYODBC到Pandas - DataFrame不工作 - 传递值的形状是(x,y),索引暗示(w,z)
Pandas:ValueError:传递值的形状是(110、10),索引暗示(111、10)
Pandas concat:ValueError:传递值的形状是blah,索引暗示blah2