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

1

ソリューション、TL;DR

関数が元のデータフレームの列数と同じ数の要素を返すようにします。したがって、この場合、get_q6return 6 要素を作成して、返された配列の最初の行に正確に 6 要素が含まれるようにします。

理由

Pandas のソース コードを調べます。あなたの場合、元のデータフレームには shape がありimplied=(5,6)ます。そのinternals.construction_error()ため、パンダの内部では、関数を適用した後に返された配列get_q6が同じ形状であるかどうかを確認しようとします。

返された配列には、各行に func を適用しているため、5 行あります。列を見つけるために、返された配列の最初の行を取ります。要素が 6 つある場合get_q6は、両方とも shape であることを確認し(5,6)ます。

しかし、あなたの場合、返された配列には、必要に応じて6つの要素ではなく、5つの要素( return の場合get_q6または[1,2,3,4,5]1つだけ( return の場合)がありget_q6ます。おそらく、最初の行で[None] passed=(5,1)`.[None]get_q6 returns. So the shape of the returned array is calculated as

最後に、implied==passedfalse と評価され、エラーがスローされます。

于 2016-06-03T02:18:42.150 に答える