1

私はnumpyに比較的慣れていません。YYYY、MM、DD などの日付を含む .csv ファイルからデータをインポートしました。「適切な」日時形式の日付を使用して、すべてを1つの配列に入れたいと思います。これは私のコードです:

na_trades = np.zeros((number_of_orders,), dtype = ('datetime64,a5,a5,i4'))
for row in range(number_of_orders):
    order = na_trades_csv[row]
    order_date = dt.datetime(order[0],order[1],order[2])
    order_date64 =  np.datetime64(order_date)
    na_trades[row] = (order_date64,order[3],order[4],order[5])

しかし、私はエラーが発生していますValueError: error setting an array element with a sequence。それはなぜですか?事前に助けてくれてありがとう!

4

2 に答える 2

2

numpy バ​​ージョン 1.6.2 を使用dtype = 'datetime64,a5,a5,i4'すると、意図した dtype になりません。

In [36]: na_trades = np.zeros((number_of_orders,), dtype = 'datetime64,a5,a5,i4')
In [37]: na_trades
Out[37]: array([1970-01-01 00:00:00], dtype=datetime64[us])

これは私にはバグのように見えますが、間違っている可能性もあります。代わりに試してください:

na_trades = np.empty(number_of_orders,
                     dtype = [
                         ('dt', 'datetime64'),
                         ('foo','a5'),
                         ('bar', 'a5'),
                         ('baz', 'i4')])
于 2013-03-29T23:59:59.420 に答える
1

これは、(python リストとは異なり) numpy 配列では、配列内の単一の要素にシーケンスを割り当てることができないためです。Numpy 配列は特定の型を持っているのに対し、Python 配列は不均一であり (たとえば、異なる要素は異なる型である可能性があります)、それらに何を投げるかはあまり気にしません。datetime型を複合型 (たとえば、2 つの文字列と intを持つもの) に設定しようとしていdatetime64ますが、構文が少しずれているため、numpy は dtype 文字列の の後のすべてを無視しています。

次のことを試してください。

z = np.zeros((5,), dtype = np.dtype([('time','datetime64'),('year','a5'),('month','a5'),('day','i4')]))

これによりnumpy.void、辞書のように機能する型が作成されます。たとえば、次のことができます。

>>> z[0]
(datetime.datetime(1970, 1, 1, 0, 0), '', '', 0)

>>> z[0]['time']
1970-01-01 00:00:00

>>> z[0][0]
1970-01-01 00:00:00
于 2013-03-30T00:01:26.713 に答える