dta_hはDataFrameであり、dta_h.Datetimeは次のようになります。
0 2013-03-01 00:00:00
1 2013-02-28 23:00:00
2 2013-02-28 22:00:00
3 2013-02-28 21:00:00
...
Name: Datetime, Length: 63001, dtype: datetime64[ns]
最近まで(これが何を意味するかについては後で説明します)、これを実行して、各期間の1時間を差し引くことができました。
dta_h.Datetime-np.timedelta(hours=1)
しかし今、私が上記を行うと、私はこれを手に入れています:
0 2013-03-01 00:11:34.967296
1 2013-02-28 23:11:34.967296
2 2013-02-28 22:11:34.967296
3 2013-02-28 21:11:34.967296
...
これは明らかに私が望んでいることではありません。ただし、これは次のとおりです。
[i-timedelta(hours=1) for i in dta_h.Datetime ]
それでも望ましい結果が得られます。
0 2013-02-28 23:00:00
1 2013-02-28 22:00:00
2 2013-02-28 21:00:00
3 2013-02-28 20:00:00
....
Length: 63001, dtype: datetime64[ns]
この問題は、Pandas 0.11にアップグレードしたときに始まったと99%確信しています。私は、成功せずにそれを説明するかもしれないバージョンの違いについてドキュメントを探し回っています。私もこの投稿を見つけました:
これはこのパンダの問題を指します
https://github.com/pydata/pandas/issues/3009
私がそこで読んだものに基づいて、私は試しました:
dta_h.Datetime-np.timedelta64(hours=1)
しかし、これは実際には何もしません。
0 2013-03-01 00:00:00
1 2013-02-28 23:00:00
2 2013-02-28 22:00:00
3 2013-02-28 21:00:00
...
1)df-np.timedeltaが機能しなくなった理由、および2)内包リストバージョンが引き続き機能する理由について何か考えはありますか?助けてくれてありがとう。
参考までに、私はNumpy 1.6.2を使用していますが、先ほど申し上げましたが、最近Pandas0.9から0.11にアップグレードしました。
Numpyは、タイムデルタの1.6.2 / 1ではかなりバグがあります。30分未満の間隔で動作します(理由はわかりません)。最善の策は、より安定したnumpy 1.7.0 / 1にアップグレードし、datetime.timedeltaを使用することです。
In [33]: df = DataFrame(dict(date = [Timestamp('20130301'),Timestamp('20130228 23:00:00'),Timestamp('20130228 22:00:00'),Timestamp('20130228 21:00:00')]))
In [34]: df
Out[34]:
date
0 2013-03-01 00:00:00
1 2013-02-28 23:00:00
2 2013-02-28 22:00:00
3 2013-02-28 21:00:00
In [37]: df['date'] + timedelta(hours=1)
Out[37]:
0 2013-03-01 01:00:00
1 2013-03-01 00:00:00
2 2013-02-28 23:00:00
3 2013-02-28 22:00:00
Name: date, dtype: datetime64[ns]
In [38]: np.__version__
Out[38]: '1.7.1'
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加