3

numpy配列にデータがあります(.csvファイルから読み取ります)。np.genfromtxtからの関連する抜粋は次のとおりです。

dtype = [("Category", "|S10"),
         ("Status", "|S11"),
         ("Date_start", object),
         ("Date_stop", object)],
names=True,
converters={2:lambda d:datetime.strptime(d, "%d/%m/%y"),
            3:lambda d:datetime.strptime(d, "%d/%m/%y")}
)

日時オブジェクトの要素へのアクセスという1つの例外を除いて、すべてが機能します。次の2行のコードは、私が期待するものを正確に返します。

print inp['Date_start'][1].month #returns 7
print np.where(inp['Category'] == '"R5"') #returns an array of matching indices

しかし、次のコード行はAttributeError: 'numpy.ndarray' object has no attribute 'month'

print np.where(inp['Date_start'].month == 7)

つまり、発生した月に基づいて結果を返すことはできません。

np.whereから必要な動作を取得する方法はありますか?

4

2 に答える 2

3

ベクトル化された属性ゲッターを定義できます。

def func(a):
    return a.month

vfunc = np.vectorize(func)

次に使用します:

np.where(vfunc(inp['Date_start']) == 7)
于 2012-08-22T17:50:43.227 に答える
1

お気づきのように、あなたinp['Date_Start']は標準ndarraydtype='object'あり、そのため、その要素の属性を持っていません。

@ user545424が提案したベクトル化された属性ゲッターとは別に、次のようなことができます。

test = np.fromiter((i.month == 7 for i in inp['Date_start']), 
                   count=inp.size, dtype=bool) 

(より効率的に実行するのにcount=inp.size役立ちますnp.fromiter。関数のドキュメントを確認してください)。

そこから、必要testな要素をフィルタリングしたり、。で条件を満たすアイテムのインデックスを取得したりするために使用できますnp.zeros(test)

ただし、日付の処理が多い場合は、 scikits.timseriesのほとんどの機能を引き継いだパンダの使用を検討することをお勧めします。numpyでの日付のサポートは、私がこれを書いている時点ではまだ実験的なものと見なされています。

于 2012-08-22T19:05:48.787 に答える