1

私はmatplotlib.datesを使用して、文字列の日付を日付オブジェクトに変換しています。後で操作する方が簡単だと考えています。

import matplotlib.dates as md    
def ConvertDate(datestr):
    '''
    Convert string date into matplotlib date object
    '''
    datefloat = md.datestr2num(datestr)
    return md.num2date(datefloat)

私がやろうとしていたのは、構造化配列をフィルタリングして、行のインデックス番号が特定の月や年に属していることを教えてくれることでした。

import numpy as np
np.where( data['date'] == 2008 )

おそらくラムダ関数を使用して、各オブジェクトを次のように文字列値に変換できます

lambda x: x.strftime('%Y')

各アイテムを比較しますが、このラムダ関数をnp.whereに配置する場所、または可能かどうかはわかりません。

何か案は?または、これを行うためのより良い方法はありますか?

4

2 に答える 2

1

注:datetimeのdatetime.strptime関数を使用することもできます。

import datetime
import numpy as np
dt1 = datetime.datetime.strptime('1/2/2012', '%d/%m/%Y')
dt2 = datetime.datetime.strptime('1/2/2011', '%d/%m/%Y')

In [5]: dt1
Out[5]: datetime.datetime(2012, 2, 1, 0, 0)

次に、次を使用できますnumpy.non-zero(たとえば、年が2012である日時のインデックスに配列をフィルター処理するため)。

a = np.array([dt1, dt2])
b = np.array(map(lambda x: x.year, a))

In [8]: b
Out[8]: array([2012, 2011], dtype=bool)

In [9]: np.nonzero(b==2012)
Out[9]: (array([0]),)

(numpyの上に)、より多くの便利な機能(例to_datetime)、および効率的な日時ストレージを調べることをお勧めします...

于 2012-12-17T11:03:36.540 に答える
1

たくさんのエラーメッセージを送った後、私は自分の質問に対する答えを見つけたと思います。

[ x for x in range(len(data)) if data['date'][x].year == 2008 ]

クエリに一致する構造化配列のインデックスを返すためにリスト内包を行いました。また、@ haydenの提案を含めましたが、多分.year代わりに使用する方がまだ高速ですが、これは今の私のニーズに合っています。strftime()numpy.where()

于 2012-12-17T11:28:39.890 に答える