3

我正在尝试在数据框中生成第 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)

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

4

2 回答 2

3

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

*应用功能未经熊猫时间跨度测试。

于 2014-11-11T14:51:13.327 回答
1

解决方案,TL;DR

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

原因

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

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

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

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

于 2016-06-03T02:18:42.150 回答