1

1D 配列があるとします。

import numpy as np
my_array = np.arange(0,10)
my_array.shape
(10, )

10Pandas では、この配列を使用して、行と列が 1 つだけの DataFrame を作成したいと考えています。例えば:

import pandas as pd
import random, string
# Random list of characters to be used as columns
cols = [random.choice(string.ascii_uppercase) for x in range(10)]

しかし、私がしようとすると:

pd.DataFrame(my_array, columns = cols)

私は得る:

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

これは、Pandas が 2D 配列を想定しており、(フラットな) 1D 配列を持っているためだと思います。1D 配列を 2D 配列にインフレートする方法や、データフレームの作成時に Panda に 1D 配列を使用させる方法はありますか?

注: Pandas の最新の安定版 (0.11.0) を使用しています。

4

4 に答える 4

3

値配列の長さは 9 (1 から 9 までの値) で、colsリストの長さは 10 です。

あなたのコードに基づいて、あなたのエラーメッセージを理解できません。

ValueError: Shape of passed values is (1, 9), indices imply (10, 9)

これは理にかなっています。

試す:

my_array = np.arange(10).reshape(1,10)

cols = [random.choice(string.ascii_uppercase) for x in range(10)]

pd.DataFrame(my_array, columns=cols)

結果は次のとおりです。

   F  H  L  N  M  X  B  R  S  N
0  0  1  2  3  4  5  6  7  8  9
于 2013-04-29T15:19:11.567 に答える
2

これらのいずれかがそれを行う必要があります:

my_array2 = my_array[None] # same as myarray2 = my_array[numpy.newaxis]

また

my_array2 = my_array.reshape((1,10)) 
于 2013-04-29T15:18:23.270 に答える
1

単一行、多列の DataFrame は珍しいものです。より自然で慣用的な選択は、列と呼ばれるものによってインデックス付けされたシリーズです。

pd.Series(my_array, index=cols)

しかし、あなたの質問に答えるために、DataFrame コンストラクターは my_array が 10 個のデータ ポイントの列であると想定しています。試してみてくださいDataFrame(my_array.reshape((1, 10)), columns=cols)。それは私にとってはうまくいきます。

于 2013-04-29T15:15:12.347 に答える
1

代替 DataFrame コンストラクターの 1 つを使用すると、my_array を再形成する必要なく DataFrame を作成できます。

import numpy as np
import pandas as pd
import random, string
my_array = np.arange(0,10)
cols = [random.choice(string.ascii_uppercase) for x in range(10)]
pd.DataFrame.from_records([my_array], columns=cols)

Out[22]: 
   H  H  P  Q  C  A  G  N  T  W
0  0  1  2  3  4  5  6  7  8  9
于 2013-04-29T18:40:31.670 に答える