19

エラーが発生しましたが、修正方法がわかりません。

以下はうまくいくようです:

def random(row):
   return [1,2,3,4]

df = pandas.DataFrame(np.random.randn(5, 4), columns=list('ABCD'))

df.apply(func = random, axis = 1)

私の出力は次のとおりです。

[1,2,3,4]
[1,2,3,4]
[1,2,3,4]
[1,2,3,4]

ただし、列の 1 つを 1 や None などの値に変更すると、次のようになります。

def random(row):
   return [1,2,3,4]

df = pandas.DataFrame(np.random.randn(5, 4), columns=list('ABCD'))
df['E'] = 1

df.apply(func = random, axis = 1)

エラーが表示されます:

ValueError: Shape of passed values is (5,), indices imply (5, 5)

私はこれに数日間取り組んできましたが、何もうまくいかないようです。興味深いのは、私が変わるとき

def random(row):
   return [1,2,3,4]

def random(row):
   print [1,2,3,4]

すべて正常に動作しているようです。

この質問は、この質問をするより明確な方法であり、混乱を招く可能性があると思います.

私の目標は、各行のリストを計算し、そこから列を作成することです。

編集:私は元々、1つの列を持つデータフレームから始めました。4 つの差分適用手順で 4 つの列を追加し、別の列を追加しようとすると、このエラーが発生します。

4

2 に答える 2

10

目標が DataFrame に新しい列を追加することである場合は、次のように、関数をスカラー値 (リストではなく) を返す関数として記述します。

>>> def random(row):
...     return row.mean()

次に適用を使用します。

>>> df['new'] = df.apply(func = random, axis = 1)
>>> df
          A         B         C         D       new
0  0.201143 -2.345828 -2.186106 -0.784721 -1.278878
1 -0.198460  0.544879  0.554407 -0.161357  0.184867
2  0.269807  1.132344  0.120303 -0.116843  0.351403
3 -1.131396  1.278477  1.567599  0.483912  0.549648
4  0.288147  0.382764 -0.840972  0.838950  0.167222

新しい列にリストを含めることができるかどうかはわかりませんが、((...)の代わりに[...]) タプルを含めることは確かに可能です:

>>> def random(row):
...    return (1,2,3,4,5)
...
>>> df['new'] = df.apply(func = random, axis = 1)
>>> df
          A         B         C         D              new
0  0.201143 -2.345828 -2.186106 -0.784721  (1, 2, 3, 4, 5)
1 -0.198460  0.544879  0.554407 -0.161357  (1, 2, 3, 4, 5)
2  0.269807  1.132344  0.120303 -0.116843  (1, 2, 3, 4, 5)
3 -1.131396  1.278477  1.567599  0.483912  (1, 2, 3, 4, 5)
4  0.288147  0.382764 -0.840972  0.838950  (1, 2, 3, 4, 5)
于 2013-10-29T19:14:29.217 に答える