sql >> データベース >  >> NoSQL >> MongoDB

MongoDBISODateのPandasDatetimeIndex

    次のデータでエラーを再現できました:

    idx0 = pd.date_range('2011-11-11', periods=4)
    idx1 = idx0.tz_localize(tz.tzutc())
    idx2 = idx1.tz_convert(tz.tzlocal())
    df = pd.DataFrame([1, 2, 3, 4])
    
    df.groupby(idx2).sum()
    Out[20]: 
                               0
    1970-01-01 00:00:00-05:00  9
    2011-11-10 19:00:00-05:00  1
    

    これはパンダコードの奥深くにあるバグであり、tz.tzlocal()にのみ関連しています。 。それは次の場合にも現れます:

    idx2.tz_localize(None)
    Out[27]: 
    DatetimeIndex(['2011-11-10 19:00:00', '1970-01-01 00:00:00',
                   '1970-01-01 00:00:00', '1970-01-01 00:00:00'],
                  dtype='datetime64[ns]', freq='D')
    

    次のソリューションのいずれかを使用できます。

    • タイムゾーンを文字列として明示的に使用します:

      idx2 = idx1.tz_convert(tz='Europe/Dublin')
      df.groupby(idx2).sum()
      Out[29]: 
                                 0
      2011-11-11 00:00:00+00:00  1
      2011-11-12 00:00:00+00:00  2
      2011-11-13 00:00:00+00:00  3
      2011-11-14 00:00:00+00:00  4
      

      またはそれが機能しない場合:

      idx2 = idx1.tz_convert(tz.gettz('Europe/Dublin'))
      
    • オブジェクトに変換します:

      df.groupby(idx2.astype(object)).sum()
      Out[32]: 
                                 0
      2011-11-10 19:00:00-05:00  1
      2011-11-11 19:00:00-05:00  2
      2011-11-12 19:00:00-05:00  3
      2011-11-13 19:00:00-05:00  4
      

    基本的に、tz=tz.local()を使用してDatetimeIndex以外に変換します 動作するはずです。

    編集: このバグ pandasgithubで修正されました。この修正は、pandas0.19リリースで利用可能になります。



    1. Mongo$existsクエリは正しいドキュメントを返しません

    2. データストアのためにRedisからMongoDBにデータを永続化する

    3. オブジェクトの配列を使用したMongoDB集約

    4. brewinstallphp56-mongoコマンドが機能しない